both the interfaces seem to compare objects for equality, so what's the major differences between them?
问题:
回答1:
IEquatable
tests whether two objects are equal.
IComparable
imposes a total ordering on the objects being compared.
For example, IEquatable
would tell you that 5 is not equal to 7. IComparable
would tell you that 5 comes before 7.
回答2:
IEquatable<T>
for equality.
IComparable<T>
for ordering.
回答3:
In addition to Greg D's answer:
You might implement IComparable without implementing IEquatable for a class where a partial ordering makes sense, and where very definitely you wish the consumer to draw the inference that just because CompareTo() returns zero, this does not imply that the objects are equal (for anything other than sorting purposes).
回答4:
As stated on the MSDN Page for IEquatable:
The IComparable interface defines the
CompareTo
method, which determines the sort order of instances of the implementing type. The IEquatable interface defines theEquals
method, which determines the equality of instances of the implementing type.
Equals
vs. CompareTo