我目前对IEnumerable.Except()方法有点困惑。我试图在Objects的数据id上执行set操作。所以,我写了一个自定义的Equality Comparer。但结果完全不是我的预期。 例子:
setLanguageHandler
输出如下: 43 42 43
但我本以为是 43 43
为什么我的假设错了?
brgds Sven Weiberg
答案 0 :(得分:7)
原因是您GetHashCode()
的实施。它为您的所有DataStructure
实例提供了不同的哈希码。
将其更改为:
public int GetHashCode(DataStructure obj)
{
return obj.DataID;
}
为了提高性能,Except
首先会比较对象的哈希码。只有它们相等时,它才会调用Equals
以确定对象是否真的相等的意思相同。
不同的哈希值告诉它对象不相等。并且您使用object.GetHashCode()
的基本实现,它将主要为不同的实例提供不同的值。
由于您的相等性由DataID
属性决定,因此将此值用作哈希码也是有意义的。