对于那些接收IComparer
作为参数的扩展方法,我可以通过从IComparer<T>
创建Comparison<T>
的方法Comparer.Create轻松获取相应的实例。 / p>
以同样的方式,为接口IEqualityComparer
提供相应的委托会很好。为什么它不存在?
答案 0 :(得分:5)
相等的一般契约是它必须以与相同哈希码方法一致的方式运行:相等所说的两个对象必须报告相同的哈希值。因此,您无法通过独特的方法提供一致的相等实现。
相反,您需要一个包含两个方法(等号和哈希代码)的契约,因此委托不足以指定该契约,您需要一个包含两个方法的IEqualityComparer
接口。
您可以在以下answer中找到更多原因,其中以Distinct
方法为例。