如何基於標識爲對象生成哈希碼。在.net中生成基於對象標識的哈希碼
我的意思是說:
- 如果
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 ?????
}
}
這可能有助於更詳細地解釋您的使用情況。 – 2010-08-23 11:15:17
*「即使它們是成員平等也會得到不同的哈希碼」* - 聽起來有點奇怪。考慮GetHashCode文檔中的以下文本(在「實現者註釋」下):*「如果兩個對象的比較相等,則每個對象的GetHashCode方法必須返回相同的值」*。我可能會錯過某些東西。 – 2010-08-23 11:40:33
這就是爲什麼我的'SomeClassThatMakesSenseToCompareByReferenceAndByValue'類返回一致的哈希碼。但在另一個類中,我想使用基於身份的'GetHashCode'和'Equals'。 – erikkallen 2010-08-23 12:01:31