C# LanguageEquals y GetHashCode


Observaciones

Cada implementación de Equals debe cumplir los siguientes requisitos:

  • Reflexivo : un objeto debe igualarse a si mismo.
    x.Equals(x) devuelve true .

  • Simétrico : no hay diferencia si comparo x con y o con y con x - el resultado es el mismo.
    x.Equals(y) devuelve el mismo valor que y.Equals(x) .

  • Transitivo : si un objeto es igual a otro objeto y este es igual a un tercero, el primero debe ser igual al tercero.
    si (x.Equals(y) && y.Equals(z)) devuelve true , entonces x.Equals(z) devuelve true .

  • Consistente : si compara un objeto con otro varias veces, el resultado es siempre el mismo.
    Las invocaciones sucesivas de x.Equals(y) devuelven el mismo valor siempre que los objetos a los que se hace referencia con x e y no se modifiquen.

  • Comparación a nulo : Ningún objeto es igual a null .
    x.Equals(null) devuelve false .

Implementaciones de GetHashCode :

  • Compatible con Equals : si dos objetos son iguales (lo que significa que Equals devuelve true), GetHashCode debe devolver el mismo valor para cada uno de ellos.

  • Rango grande : si dos objetos no son iguales ( Equals falso), debería haber una alta probabilidad de que sus códigos hash sean distintos. El hashing perfecto a menudo no es posible ya que hay un número limitado de valores para elegir.

  • Barato : debería ser barato calcular el código hash en todos los casos.

Consulte: Pautas para la sobrecarga de Equals () y Operator ==

Equals y GetHashCode Ejemplos relacionados