[英]Using GetHashCode of IEqualityComparer the right way
当使用IEqualityComparer
比较集合中的对象时,我不确定以下哪一种方法是最好的。
这是实现:
class CarComparer : IEqualityComparer<Car>
{
public bool Equals(Car x, Car y)
{
throw new NotImplementedException();
}
public int GetHashCode(Car car)
{
//
}
}
这是我实现GetHashCode
两个选项
public int GetHashCode(Car row)
{
return HashCode.Combine(row.Name, row.Color , row.Size);
}
要么,
public int GetHashCode(Car row)
{
return row.GetHashCode();
}
我不喜欢第一个,因为它使代码的可维护性降低,并且在资源方面可能更便宜。 但是很多人都是这样使用的。
我想CarComparer
在 linq 函数中使用我的CarComparer
。 像这样:
cars.Distinct(new CarComparer());
我应该使用哪一种?
这是一个基于意见的问题吗?
正确答案:
使用 LINQ 时, GetHashCode
在Equals
方法之前调用,并且仅当GetHashCode
的结果对于集合中的两个项目相等时。
所以GetHashCode
必须被覆盖:
public int GetHashCode(Car row)
{
return HashCode.Combine(row.Name, row.Color , row.Size);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.