簡體   English   中英

正確使用 IEqualityComparer 的 GetHashCode

[英]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 時, GetHashCodeEquals方法之前調用並且僅當GetHashCode的結果對於集合中的兩個項目相等時。

所以GetHashCode必須被覆蓋:

  public int GetHashCode(Car row)
{
    return HashCode.Combine(row.Name, row.Color , row.Size);
}

在此處查看完整回復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM