No es una respuesta directa a su pregunta, que Jonas ha respondido bien, sin embargo esto puede ser de ayuda si usted está preocupado acerca de las pruebas de igualdad en los hashes
De nuestras pruebas, dependiendo de lo que está requiriendo con hashcodes, en C#, los códigos hash no necesitan ser únicos para las operaciones de Igualdad. Como ejemplo, considere lo siguiente:
Teníamos el requisito de sobrecargar el operador igual, y por lo tanto la función GetHashCode de nuestros objetos ya que se habían vuelto volátiles y sin estado, y se abastecían directamente de datos, por lo que en un lugar de la aplicación que necesitábamos para garantizar que un objeto se viera como igual a otro objeto si se obtuviera de los mismos datos, no solo si era la misma referencia. Nuestros identificadores de datos únicos son Guids.
El operador de iguales fue fácil de atender, ya que acabamos de comprobar en el Guid del registro (después de comprobar nulo).
Desafortunadamente, el tamaño de los datos HashCode (ser un int) depende del sistema operativo, y en nuestro sistema de 32 bits, el código hash sería de 32 bits. Matemáticamente, cuando anulamos la función GetHashCode, es imposible generar un hashcode exclusivo a partir de un guid que sea mayor que 32 bit (míralo desde el inverso, ¿cómo traducirías un entero de 32 bits a un guid?).
Luego realizamos algunas pruebas donde tomamos el Guid como una cadena y devolvimos el HashCode del Guid, que casi siempre devuelve un identificador único en nuestras pruebas, pero no siempre.
Lo que notamos sin embargo, cuando un objeto está en un objeto de recolección hash (una tabla hash, un diccionario, etc.), cuando 2 objetos no son únicos sino sus hashcodes, el hashcode solo se usa como primera opción de búsqueda. si se utilizan códigos hash no exclusivos, el operador de igualdad siempre se utiliza como un retroceso para desviar la igualdad.
Como dije, esto puede o no ser relevante para su situación, pero si lo es, es un consejo útil.
ACTUALIZACIÓN
Para demostrar, tenemos una Hashtable:
Clave: Objeto A (Hashcode 1), del valor del objeto A1
Key: Objeto B (Hashcode 1), el valor de objetos B1
Key: objeto C (Hashcode 1), del valor del objeto C1
Key: objeto D (Hashcode 2), el valor Ob Ject D1
Key: Objeto E (Hashcode 3), de objetos de valor E1
Cuando llamo la tabla hash para el objeto con la clave de objeto A, se devolverá el objeto A1 después de 2 pasos, una petición de hashcode 1, luego una comprobación de igualdad en el objeto clave ya que no hay una clave única con el código hash 1
Cuando llamo a la tabla hash del objeto con la clave del objeto D, el objeto D1 se devolverá después de 1 paso , una búsqueda hash
Conclusión: Nunca persista ni transmita el resultado de 'GetHashCode()'. Úselo solo para su propósito previsto: facilitar el uso de tablas hash. –