如果你不重写
Equals
和
GetHashCode
,那么您将得到基于引用标识的等式。换句话说,
x.Equals(y)
当且仅当
Object.ReferenceEquals(x, y)
这是真的。对于散列码,
x.GetHashCode() = y.GetHashCode()
如果
x、 等于(y)
这是真的,但事实并非如此
可能的
(但不太可能)即使两个引用不相等,哈希码也相等。垃圾收集和对象重新定位不会影响这一点。
你
能够
也覆盖
等于
和
方法
在类中,根据对象中的数据使对象相等,就像
String
做这样,你可以在字典中查找一个条目,其中字典中的键是一个对象,而你提供给它的键是一个对象
TryGetValue
(或索引器)是“不同但相等”的对象。如果你这么做,你应该
通常
只有在对象的生命周期内不能改变的方面,或者清楚地记录可变方面应该改变的方面,才能建立平等
不
将该对象用作字典键后,将被更改。
这是相当常见的覆盖
等于
和
方法
,并实施
IEquatable(Of T)
-但这并不意味着这总是正确的做法。它通常适用于合理的“原始”类型,而不是特定于业务的类型,例如
Point
而不是
Customer
.但这只是一般性的指导——你应该针对自己的具体情况考虑利弊。