我有以下代码,但似乎不起作用:
上下文:
我有两个对象列表:
* listOne有100条记录
* listTwo 有 70 条记录
其中许多具有相同的 Id 属性(在两个列表中);
var listOneOnlyItems = listOne.Except(listTwo, new ItemComparer ());
这是比较器
public class ItemComparer : IEqualityComparer<Item>
{
public bool Equals(Item x, Item y)
{
if (x.Id == y.Id)
return true;
return false;
}
public int GetHashCode(Item obj)
{
return obj.GetHashCode();
}
}
运行此代码并查看结果后
listOneOnlyItems
仍有 100 条记录(应该只有 30 条)。谁能帮我吗?
还有,正在运行
IEnumerable<Item> sharedItems = listOne.Intersect(listTwo, new ItemComparer());
在sharedItems集合中返回零结果
最佳答案
public int GetHashCode(Item obj)
{
return obj.Id.GetHashCode();
}
至少值得检查一下 - IIRC GetHashCode() 在相等性之前首先进行测试,如果它们没有相同的哈希值,则不会费心检查相等性。我不确定 obj.GetHashCode()
会发生什么——这取决于您在 Item
类上实现的内容。
关于c# - 为什么 .Except() 和 Intersect() 不能使用 LINQ 在这里工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3420228/