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 )。
简而言之,对应于适当相等比较的哈希码使得创建一组项目的成本更低。这在很多情况下很有用 - 例如Distinct
、Except
、Intersect
、Union
、Join
、GroupJoin
、GroupBy
、ToLookup
等。
关于c# - 为什么 IEqualityComparer<T> 有 GetHashCode() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5104716/