2

对于那些接收 as 参数的扩展方法,我可以通过从 a创建一个的方法Comparer.CreateIComparer轻松获取相应的实例。IComparer<T>Comparison<T>

同样,最好有一个对应的 interface 委托IEqualityComparer。为什么它不存在?

4

1 回答 1

5

相等的一般约定是它的行为方式必须与相同的哈希码方法一致:相等表示相等的两个对象必须报告相同的哈希值。因此,您无法通过独特的方法提供一致的相等实现。相反,您需要一个包含两种方法(等于和哈希码)的合约,因此委托不足以指定该合约,您需要一个接口,例如IEqualityComparer包含两个方法。

您可以在以下答案中找到更多原因,该答案以该Distinct方法为例。

于 2013-10-31T12:02:02.957 回答