Preferring EqualityComparer to IEqualityComparer
Preferring EqualityComparer to IEqualityComparer
在MSDN上的IEqualityComparer
备注部分中:
-
我们建议您从EqualityComparer
类派生,而不是实现IEqualityComparer 接口,因为EqualityComparer 类使用IEquatable .Equals方法而不是Object.Equals方法进行相等性测试...。 - 我不理解引用中的论点,为什么我们应该更喜欢从EqualityComparer
类派生,而不是实现IEqualityComparer 。它暗示了实现IEqualityComparer 的对象将使用Object.Equals进行相等性测试,但实现IEqualityComparer 的整个目的不就是不想使用Object.Equals或IEquatable .Equals进行相等性测试吗? - 它还暗示了如果我们从EqualityComparer
派生,那么派生类将使用IEquatable .Equals方法进行相等性测试。同样,从EqualityComparer 派生的整个目的不就是不想使用Object.Equals或IEquatable .Equals进行相等性测试(因为EqualityComparer .Default已经使用Object.Equals或IEquatable .Equals进行测试)吗?
- 我不理解引用中的论点,为什么我们应该更喜欢从EqualityComparer
-
...这与Dictionary
类和其他泛型集合的Contains、IndexOf、LastIndexOf和Remove方法一致。 - 我认为.NET库中的大多数集合在测试元素的默认相等性时(即当用户未提供自定义的IEqualityComparer
对象给这些集合时),通过EqualityComparer .Default调用IEquatable .Equals或Object.Equals进行测试。 - 为什么这些集合(在测试默认相等性时)不直接调用IEquatable
.Equals或Object.Equals,而是通过EqualityComparer .Default类来调用?
- 我认为.NET库中的大多数集合在测试元素的默认相等性时(即当用户未提供自定义的IEqualityComparer