title: What's the best strategy for Equals and GetHashCode?
body: <p>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?</p>
  
  <p>This is my current implementation:</p>
  
  <pre><code>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();
  }
  </code></pre>