Preferring EqualityComparer to IEqualityComparer

13 浏览
0 Comments

Preferring EqualityComparer to IEqualityComparer

在MSDN上的IEqualityComparer备注部分中:

  1. 我们建议您从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进行测试)吗?
  2. ...这与Dictionary类和其他泛型集合的Contains、IndexOf、LastIndexOf和Remove方法一致。

    • 我认为.NET库中的大多数集合在测试元素的默认相等性时(即当用户未提供自定义的IEqualityComparer对象给这些集合时),通过EqualityComparer.Default调用IEquatable.Equals或Object.Equals进行测试。
    • 为什么这些集合(在测试默认相等性时)不直接调用IEquatable.Equals或Object.Equals,而是通过EqualityComparer.Default类来调用?
0