Sólo si están siendo utilizados como una llave y que no quieren la equivalencia de base en la instancia del objeto en sí. Si solo quiere que las referencias a la misma instancia sean equivalentes, está bien y no necesita hacer nada, pero si usa su tipo como clave y desea que las instancias "equivalentes" se consideren iguales, su clase debe implementar Equals()
y GetHashCode()
.
Si su tipo personalizado se almacena como un valor, y no se utiliza como una clave, esto no es necesario, por supuesto. Por ejemplo, en este caso MyType no necesita anular Equals()
o GetHashCode()
porque solo se usa como un valor y no como la clave de almacenamiento.
Dictionary<string, MyType> x;
Sin embargo, en este caso:
Dictionary<MyType, string> x;
su tipo personalizado es la clave, y por lo tanto tendría que anular Equals()
y GetHashCode()
. El GetHashCode()
se usa para determinar a qué ubicación se asigna, y el Equals()
se usa para resolver colisiones en el código hash (entre otras cosas).
Debería anular los mismos dos métodos al tratar con muchas consultas LINQ
también. Alternativamente, puede proporcionar un IEqualityComparer
autónomo aparte de su clase para determinar si dos instancias son equivalentes.
Gracias, una buena respuesta. – alan2here