为什么IEqualityComparer没有相应的委托,因为有IComparer的比较

时间:2013-10-31 12:00:44

标签: c# .net linq delegates

对于那些接收IComparer作为参数的扩展方法,我可以通过从IComparer<T>创建Comparison<T>的方法Comparer.Create轻松获取相应的实例。 / p>

以同样的方式,为接口IEqualityComparer提供相应的委托会很好。为什么它不存在?

1 个答案:

答案 0 :(得分:5)

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

您可以在以下answer中找到更多原因,其中以Distinct方法为例。