To work properly in a hashable context, it is a basic rule that if two items are equal (or equivalent) then their hash values must be the same. Therefore, one needs to implement an override of T.GetHashCode() as part of implementing any form of IEqualityComparer<> or IComparer<> interface. This should have been a requirement of the interfaces and the hashable collection types. This would seem to be an issue in the .NET framework design.