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

rol*_*360 2 .net c# linq delegates

对于那些接收ICompareras参数的扩展方法,我可以通过方法Comparer.Create轻松获取相应的实例,该方法创建一个IComparer<T>来自aComparison<T>.

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

Mig*_*boa 5

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

您可以在以下答案中找到更多原因,该答案使用该Distinct方法作为示例.