首頁 >後端開發 >C++ >如何正確重寫 LINQ 的 except() 方法的 Equals() 和 GetHashCode()?

如何正確重寫 LINQ 的 except() 方法的 Equals() 和 GetHashCode()?

Susan Sarandon
Susan Sarandon原創
2025-01-05 06:32:40224瀏覽

How to Properly Override Equals() and GetHashCode() for LINQ's Except() Method?

為自訂類別實作Equals() 和GetHashCode() 方法:一個實際範例

重寫Equals() 和GetHashCode()方法在自訂類別中對於確保正確的物件比較和雜湊至關重要。本文示範了為您的RecommendationDTO 類別實作這些方法的正確方法,以使其能夠與 LINQ 的 except() 方法一起使用。

實作 Equals()

重寫 Equals (),您需要提供一個自訂實現,根據物件的獨特屬性來比較物件。在您的情況下,RecommendationId 屬性是一個適當的識別碼。以下是正確的實作:

public override bool Equals(object obj)
{
    var item = obj as RecommendationDTO;

    if (item == null)
    {
        return false;
    }

    return this.RecommendationId.Equals(item.RecommendationId);
}

實作 GetHashCode()

GetHashCode() 方法為物件產生雜湊碼。為了保持比較一致,對於具有相同標識屬性的對象,返回的雜湊碼應該相同。在您的情況下,您可以傳回RecommendationId屬性的雜湊程式碼:

public override int GetHashCode()
{
    return this.RecommendationId.GetHashCode();
}

使用LINQ except()

使用這些重寫的方法,您現在可以利用LINQ except() 方法根據RecommendationId 屬性排除彼此相等的物件。例如:

var list1 = new List<RecommendationDTO> { /* ... */ };
var list2 = new List<RecommendationDTO> { /* ... */ };

var result = list1.Except(list2);

注意: 確保檢查空值並為屬性和方法使用正確的大小寫。

以上是如何正確重寫 LINQ 的 except() 方法的 Equals() 和 GetHashCode()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn