public new bool Equals(object x, object y)
 {
     IComparerWrapper[] comparers = _comparers;
     for (int i = 0; i < comparers.Length; i++)
     {
         IComparerWrapper equalityComparer = comparers[i];
         if (equalityComparer.IsCompatible(x) && equalityComparer.IsCompatible(y))
         {
             return(equalityComparer.Equals(x, y));
         }
     }
     return(ReferenceEqualityComparer.Instance.Equals(x, y));
 }
 public int GetHashCode(object obj)
 {
     IComparerWrapper[] comparers = _comparers;
     for (int i = 0; i < comparers.Length; i++)
     {
         IComparerWrapper equalityComparer = comparers[i];
         if (equalityComparer.IsCompatible(obj))
         {
             return(equalityComparer.GetHashCode(obj));
         }
     }
     return(ReferenceEqualityComparer.Instance.GetHashCode(obj));
 }