[英]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.