我的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的必要性使我无法理解。

第二,这似乎不起作用。我做错什么了吗?

我的List<T>. distinct()有什么问题?

我不理解GetHashCode,,也许我在哪里绊倒。

要回答您的第一个问题,请查看此处获取更多信息。

回答第二个问题:你忘了item2应该是item2. itemname

return (item1.ID == item2.ID && item1.itemName.Equals(item2.itemName));

Distinct方法的工作方式如下:

  1. 使用GetHashCode检查两个对象是否具有相同的哈希码。
  2. 如果是,现在确保它们绝对等于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