c# interface icomparable iequatable

c# - ¿Cuál es la diferencia entre las interfaces IComparable e IEquatable?



(4)

ambas interfaces parecen comparar objetos para la igualdad, entonces, ¿cuáles son las principales diferencias entre ellos?


Además de la respuesta de Greg D''s:

Puede implementar IComparable sin implementar IEquatable para una clase donde un orden parcial tiene sentido, y donde definitivamente desea que el consumidor extraiga la inferencia de que solo porque CompareTo () devuelve cero, esto no implica que los objetos sean iguales (para nada aparte de los propósitos de clasificación).


Como se indica en la página de MSDN para IEquatable :

La interfaz IComparable define el método CompareTo , que determina el orden de las instancias del tipo de implementación. La interfaz IEquatable define el método Equals , que determina la igualdad de instancias del tipo de implementación.

Equals contra CompareTo


IEquatable<T> para la igualdad.

IComparable<T> para ordenar.


IEquatable prueba si dos objetos son iguales.

IComparable impone un orden total en los objetos que se comparan.

Por ejemplo, IEquatable le diría que 5 no es igual a 7. IComparable le diría que 5 viene antes de 7.