title: IEqualityComparer GetHashCode being called but Equals not
body: <p>I have two lists that I am trying to compare. So I have created a class that implements the <code>IEqualityComparer</code> interface, please see below in the bottom section of code. </p>
  
  <p>When I step through my code, the code goes through my <code>GetHashCode</code> implementation but not the <code>Equals</code>? I do not really understand the <code>GetHashCode</code> method, despite reading around on the internet and what exactly it is doing. </p>
  
  <pre><code>List&lt;FactorPayoffs&gt; missingfactorPayoffList = 
      factorPayoffList.Except(
          factorPayoffListOrg,
          new FactorPayoffs.Comparer()).ToList();
  
  List&lt;FactorPayoffs&gt; missingfactorPayoffListOrg =
      factorPayoffListOrg.Except(
          factorPayoffList,
          new FactorPayoffs.Comparer()).ToList();
  </code></pre>
  
  <p>So in the two lines of code above the two lists return me every item, telling me that the two lists do not contain any items that are the same. This is not true, there is only row that is different. I'm guessing this is happening because the <code>Equals</code> method is not getting called which in turns makes me wonder if my <code>GetHashCode</code> method is working as its supposed to?</p>
  
  <pre><code>class FactorPayoffs
      {
          public string FactorGroup { get; set; }
          public string Factor { get; set; }
          public DateTime dtPrice { get; set; }
          public DateTime dtPrice_e { get; set; }
          public double Ret_USD { get; set; }
  
          public class Comparer : IEqualityComparer&lt;FactorPayoffs&gt;
          {
              public bool Equals(FactorPayoffs x, FactorPayoffs y)
              {                    
                  return x.dtPrice == y.dtPrice &amp;&amp; 
                      x.dtPrice_e == y.dtPrice_e &amp;&amp; 
                      x.Factor == y.Factor &amp;&amp; 
                      x.FactorGroup == y.FactorGroup;
              }
  
              public int GetHashCode(FactorPayoffs obj)
              {
                  int hash = 17;
                  hash = hash * 23 + (obj.dtPrice).GetHashCode();
                  hash = hash * 23 + (obj.dtPrice_e).GetHashCode();
                  hash = hash * 23 + (obj.Factor ?? "").GetHashCode();
                  hash = hash * 23 + (obj.FactorGroup ?? "").GetHashCode();
                  hash = hash * 23 + (obj.Ret_USD).GetHashCode();
                  return hash;
              }
          }
      }
  </code></pre>