我的List. distinct()有什么问题?
本文关键字:什么 问题 distinct List 我的 | 更新日期: 2023-09-27 17:50:23
我有一个类MyItems,它实现了IEqualityComparer并覆盖了以下方法:
public bool Equals(MyItems item1, MyItems item2)
{
return (item1.ID == item2.ID && item1.itemName.Equals(item2));
}
public int GetHashCode(MyItems item)
{
return item.ID.GetHashCode() ^ item.itemName.GetHashCode();
}
首先,为什么需要GetHashCode
?我理解重写Equals
方法,但是,GetHashCode
的必要性使我无法理解。
第二,这似乎不起作用。我做错什么了吗?
GetHashCode,
,也许我在哪里绊倒。要回答您的第一个问题,请查看此处获取更多信息。
回答第二个问题:你忘了item2应该是item2. itemname
return (item1.ID == item2.ID && item1.itemName.Equals(item2.itemName));
Distinct
方法的工作方式如下:
- 使用
GetHashCode
检查两个对象是否具有相同的哈希码。 - 如果是,现在确保它们绝对等于
Equals
。
GetHashCode
是更昂贵的检查的第一个检查:Equals
你的Equals
方法有一个错误:
return (item1.ID == item2.ID && item1.itemName.Equals(item2));
应:return (item1.ID == item2.ID && item1.itemName.Equals(item2.itemName));
// ^^^^^^^^^
另外,如果你使用的列表或数组类型不是<MyItems>
类型,你还需要重写Equals方法
如果你想比较对象,你应该在它们的类中重写Equals(object obj)
。
此外,无论何时重写Equals(object obj)
,最好重写GetHashCode