根据.net中的对象标识生成哈希码

时间:2010-08-23 11:05:23

标签: .net hashcode

如何根据对象生成对象的哈希码。

我的意思是:

  • 如果object.ReferenceEquals(a, b) == true,则ab将获得相同的哈希码。
  • 如果object.ReferenceEquals(a, b) == false,则ab应该有相当的机会获得不同的哈希码,即使它们在成员上相等。

我拥有的是:

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 ?????
    }
}

3 个答案:

答案 0 :(得分:3)

您可能正在寻找RuntimeHelpers.GetHashCode

答案 1 :(得分:2)

如果您不覆盖GetHashCode,它将返回 identic 哈希码。

答案 2 :(得分:1)

不要做任何事情 - 因为两个对象都指向同一个实例,所以使用默认实现将始终为两个对象生成相同的HashCode。