Search code examples
c#.netequalsgethashcode

What's the best strategy for Equals and GetHashCode?


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();
}

Solution

  • 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);
    }