GetHashCode With Generic Collection Returns : It looks like hash code issues and implementing your own equality logic have been beaten to death, but I cannot seem to find a definitive answer to this.

I have a custom object (Step) that overrides Equals, GetHashCode, ==, and != as suggested by the <a href="https://msdn.microsoft.com/ru-ru/library/ms173147(v=vs.80).aspx">MSDN documentation</a>.  This object by itself works fine; When comparing a Step to a Step, the equality operators work as expected.  Note that by equality I'm referring to the values of the Step's properties, not reference equality.

I have a second object (Steps) that stores the Step object in a generic list.  Now I want to see if a list of Step objects is equal to another list of Step objects.  In the Steps object I overrode the various methods and operators as I had done in Step.  For the GetHashCode override, I iterate through the Step list and combine the hash codes:

    foreach(var step in steplist.Steps)
    {
        hash += step.GetHashCode()
    }
    return hash

Simple.  But it does not work.  The hash codes for two separate lists with equal Step objects values return different hash codes.  I'm assuming I'm not implementing the hash code override correctly.

I'm about ready to hard code the returning hash code to zero and call it a day.  Any insight is appreciated.