c# - 为什么 IEqualityComparer<T> 有 GetHashCode() 方法?

标签 c# linq ienumerable iequalitycomparer

IEqualityComparer在命名空间 System.Collections.Generic 中有以下方法:

bool Equals(T x, T y);
int GetHashCode(T obj);

由于此接口(interface)用于检查对象是否相等,因此第一个方法Equals 是有意义的。但是为什么我们还需要实现 GetHashCode 呢?为什么它首先存在于界面中?什么时候需要它,为什么?

我将它与 Enumerable.Distinct() 一起使用命名空间 System.Linq 中的方法,我很惊讶地看到连 GetHashCode() 都被调用了,还有 Equals() .为什么? Distinct 是如何工作的?

最佳答案

有关 Distinct 工作原理的详细信息(或至少是一个简单的示例实现),请参阅我的 Edulinq blog post on it ( old - 404 )。

简而言之,对应于适当相等比较的哈希码使得创建一组项目的成本更低。这在很多情况下很有用 - 例如DistinctExceptIntersectUnionJoinGroupJoinGroupByToLookup 等。

关于c# - 为什么 IEqualityComparer<T> 有 GetHashCode() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5104716/

相关文章:

c# - EntityFramework Core 2.0 跳过加载专栏

c# - LINQ 总和溢出异常?

c# - 在 nhibernate 中 Linq-ing 计算属性无法解析属性错误

c# - 当 skip 不能被 take 整除时,通过 pageIndex/pageSize 分页实现 skip/take 分页

c# - 安全检查不可重复的 IEnumerables 是否为空

c# - "Invariant unproven"使用在返回语句中创建特定新对象的方法时

c# - 释放文件上的句柄。 ImageSource 来自 BitmapImage

c# - USB HID col参数是什么

c# - 具有不同数据类型的 Linq

c# - IEnumerable 的可能多重枚举 - 如果我想要多重枚举怎么办?