【问题标题】:Why there is no corresponding delegate for IEqualityComparer as there is a Comparison for IComparer为什么 IEqualityComparer 没有对应的委托,因为 IComparer 有比较
【发布时间】:2013-10-31 12:00:43
【问题描述】:

对于那些接收IComparer 作为参数的扩展方法,我可以通过Comparer.CreateComparison<T> 创建一个IComparer<T> 方法轻松获得相应的实例。

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

【问题讨论】:

  • 这是一个非常好的问题,但可能可以像大多数这些问题一样总结。语言和框架的设计者并没有这样做。

标签: c# .net linq delegates


【解决方案1】:

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

你可以在下面的answer中找到更多的原因,这里以Distinct方法为例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多