How can I generate a hash code for an object based on its identity.
What I mean is that:
- if
object.ReferenceEquals(a, b) == true, thenaandbwill get the same hash code. - if
object.ReferenceEquals(a, b) == false, thenaandbshould have a decent chance to get different hash codes even if they are memberwise equal.
What I have is:
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 ????? } }
GetHashCodedocumentation (under "Notes to implementers"): "If two objects compare as equal, the GetHashCode method for each object must return the same value". I may miss something though.SomeClassThatMakesSenseToCompareByReferenceAndByValueclass returns a consistent hash code. But in my other class, I want to useGetHashCodeANDEqualsbased on identity.