如何根据对象生成对象的哈希码。
我的意思是:
object.ReferenceEquals(a, b) == true
,则a
和b
将获得相同的哈希码。object.ReferenceEquals(a, b) == false
,则a
和b
应该有相当的机会获得不同的哈希码,即使它们在成员上相等。我拥有的是:
class SomeClassThatMakesSenseToCompareByReferenceAndByValue {
override Equals(object o) {
return MemberwiseEquals(o);
}
override GetHashCode() {
return MemberwiseGetHashCode();
}
}
class SomeClassThatNeedsReferenceComparison {
SomeClassThatMakesSenseToCompareByReferenceAndByValue obj;
override Equals(object o) {
return o is SomeClassThatNeedsReferenceComparison && object.ReferenceEquals(this.obj, (o as SomeClassThatNeedsReferenceComparison).obj);
}
override GetHashCode() {
return ?????
}
}
答案 0 :(得分:3)
您可能正在寻找RuntimeHelpers.GetHashCode
答案 1 :(得分:2)
如果您不覆盖GetHashCode
,它将返回 identic 哈希码。
答案 2 :(得分:1)
不要做任何事情 - 因为两个对象都指向同一个实例,所以使用默认实现将始终为两个对象生成相同的HashCode。