代码之家  ›  专栏  ›  技术社区  ›  erikkallen

在.net中基于对象标识生成哈希代码

  •  2
  • erikkallen  · 技术社区  · 14 年前

    我的意思是:

    • object.ReferenceEquals(a, b) == true ,那么 a b
    • object.ReferenceEquals(a, b) == false ,那么 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 ?????
        }
    }
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   Miserable Variable    14 年前
        2
  •  2
  •   Andrey    14 年前

    GetHashCode 它将返回 相同的 散列码。

        3
  •  1
  •   Martin Harris    14 年前

    不要做任何事情-因为两个对象都指向同一个实例,所以总是使用默认实现为两个对象生成相同的哈希代码。