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.