I'm working with a domain model and was thinking about the various ways that we have to implement these two methods in .NET. What is your preferred strategy?
This is my current implementation:
public override bool Equals(object obj)
{
var newObj = obj as MyClass;
if (null != newObj)
{
return this.GetHashCode() == newObj.GetHashCode();
}
else
{
return base.Equals(obj);
}
}
// Since this is an entity I can use its Id
// When I don't have an Id, I usually make a composite key of the properties
public override int GetHashCode()
{
return String.Format("MyClass{0}", this.Id.ToString()).GetHashCode();
}
Assuming that the instances are equal because the hash codes are equal is wrong.
I guess your implementation of GetHashCode is OK, but I usually use things similar to this:
public override int GetHashCode() {
return object1.GetHashCode ^ intValue1 ^ (intValue2 << 16);
}