从IEqualityComparer<T>MSDN上的备注部分:
我们建议您从EqualityComparer <T>类派生而不是实现IEqualityComparer <T>接口,因为EqualityComparer <T>类使用IEquatable <T> .Equals方法而不是Object.Equals方法测试相等性....
我不明白引用的论点,为什么我们宁愿从EqualityComparer<T>类而不是实现派生 IEqualityComparer<T>.它意味着实现的对象IEqualityComparer<T>将使用测试相等性Object.Equals,但是IEqualityComparer<T>当我们不想使用Object.Equals或测试相等性时,它不是实现的全部要点IEquatable<T>.Equals.
它还暗示如果我们派生自EqualityComparer<T>,那么派生类将使用IEquatable<T>.Equals方法测试相等性.同样,这不是从EqualityComparer<T>我们不想使用Object.Equals或测试相等性的时候得到的全部内容IEquatable<T>.Equals(因为EqualityComparer<T>.Default已经使用Object.Equals或测试过IEquatable<T>.Equals)?
......这是符合的包含,的IndexOf,LastIndexOf和Remove字典<TKEY的,TValue>中类和其他泛型集合的方法.
我假设.NET库中的大多数集合测试默认的元素相等(即当用户不IEqualityComparer<T>向这些集合提供自己的自定义对象时)通过调用IEquatable<T>.Equals或Object.Equals(取决于类型的元素是否T实现IEquatable<T>)来实现EqualityComparer<T>.Default.
为什么这些集合(在测试默认相等时)不直接调用IEquatable<T>.Equals或Object.Equals直接调用EqualityComparer<T>.Default类?