B-R*_*Rad 3 c# wpf overriding gethashcode
我有一个实现IEqualityComparer的类MyItems并覆盖以下方法:
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();
}
Run Code Online (Sandbox Code Playgroud)
首先,为什么有GetHashCode必要?我理解压倒这种Equals方法,然而,GetHashCode我的必要性已经无法实现.
其次,这似乎不起作用.我有什么问题吗?在那里我不明白GetHashCode,那可能是我绊倒的地方.
要回答您的第一个问题,请查看此处以获取更多信息.
回答你的第二个问题:你忘记了item2应该是item2.itemName
return (item1.ID == item2.ID && item1.itemName.Equals(item2.itemName));
Run Code Online (Sandbox Code Playgroud)
该Distinct方法的工作原理如下:
GetHashCode.Equals.这GetHashCode是对更昂贵的支票的第一次检查:Equals
您的Equals方法有错误:
return (item1.ID == item2.ID && item1.itemName.Equals(item2));
Run Code Online (Sandbox Code Playgroud)
应该:
return (item1.ID == item2.ID && item1.itemName.Equals(item2.itemName));
// ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
此外,如果您使用的List或数组类型不是<MyItems>类型,则还需要覆盖Equals方法.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |