方法CompareTo()
是否使用GetHashCode()
为对象定义了一个可比较的(不是接口)数字?如果我做
MyObject.CompareTo(MyOtherObject.GetHashCode())
如果我不想覆盖CompareTo()
方法会怎样?
答案 0 :(得分:3)
不,CompareTo不会/不应该使用GetHashCode来检查是否相等。
他们可能(强调可能)使用它来确定不等式,如果哈希码被缓存,因此比查看比所有内部数据更便宜,但是相等的哈希码并不一定意味着相等的对象。
如果你实现了Equals和GetHashCode(你需要实现两者或没有),那么你应该遵循以下规则:
如果这是你自己创造的一个对象,那么这里有一些规则:
IComparable<T>
。不要仅使用CompareTo 来获得相等检查。IEquatable<T>
。如果它是您无法修改的对象,请创建:
IComparer<T>
支持订购IEqualityComparer<T>
支持平等检查大多数将进行排序或相等检查的集合或方法允许您指定一个额外的对象,该对象确定排序或相等检查的规则,假设对象内置的实现是错误的(可能只在这一个场景中) )或遗失。
指向所有类型的链接: