IComparable和IEquatable接口有什么区别?

这两个接口似乎比较对象的平等,所以他们之间的主要区别是什么?

IEquatabletesting两个对象是否相等。

IComparable对所比较的对象强加一个总的sorting。

例如, IEquatable会告诉你,5不等于IEquatable会告诉你,5在7之前。

IEquatable<T>表示相等。

IComparable<T>用于sorting。

除了Greg D的回答:

你可能会实现IComparable而不实现IEquatable的类,其中部分sorting是有道理的,你肯定希望消费者绘制推论,因为CompareTo()返回零,这并不意味着对象是相等的除了分类目的)。

正如在IEquatable的MSDN页面所述 :

IComparable接口定义了CompareTo方法,该方法确定实现types实例的sorting顺序。 IEquatable接口定义了Equals方法,它决定了实现types实例的相等性。

EqualsCompareTo