首頁 > 後端開發 > C++ > 如何在 C# 中正確重寫 Equals() 和 GetHashCode() 進行有效的物件比較?

如何在 C# 中正確重寫 Equals() 和 GetHashCode() 進行有效的物件比較?

DDD
發布: 2025-01-04 21:16:39
原創
208 人瀏覽過

How to Properly Override Equals() and GetHashCode() for Effective Object Comparison in C#?

重寫Equals() 和GetHashCode() 以獲得有效的物件等價

在追求物件相等性時,Equals()和GetHashCode() )方法發揮關鍵作用。對於自訂類,有必要重寫這些方法以建立有意義的比較和哈希機制。本文闡明了在RecommendationDTO 類別的上下文中實現這些方法的正確方法,使其能夠與 LINQ except() 方法無縫整合。

重寫 Equals()

  1. 可空型別: 在提供的程式碼中, Equals() 方法檢查空參照。但是,對於像 DateTime? 這樣的可空類型,應該修改比較以適當地處理空值。
  2. 考慮所有屬性: 相等比較應該考慮定義業務等價性的所有相關屬性物件。在這種情況下,僅比較 ReferenceId,但可能還需要包含其他關鍵屬性。

重寫GetHashCode()

  1. 哈希碼計算: GetHashCode() 方法應根據用於的屬性計算哈希碼平等比較。由於 ReferenceId 用於相等,因此它也應該用於計算雜湊碼。
  2. 一致性雜湊: 雜湊碼在同一物件的多次呼叫中應該保持一致。這可以確保具有相同屬性的物件始終具有相同的雜湊碼,從而實現高效的雜湊和查找操作。

範例實作

這是一個增強的實作RecommendationDTO的Equals()和GetHashCode()方法class:

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

    if (item == null || ReferenceId == Guid.Empty || item.ReferenceId == Guid.Empty)
    {
        return false;
    }

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

public override int GetHashCode()
{
    if (ReferenceId == Guid.Empty)
    {
        throw new InvalidOperationException("ReferenceId cannot be Guid.Empty when calculating hash code.");
    }

    return this.RecommendationId.GetHashCode();
}
登入後複製

透過以這種方式實現Equals() 和GetHashCode(),RecommendationDTO 類別現在可以有效地與 LINQ except() 方法一起使用,確保處理具有相同有意義屬性的物件一樣獨特。

以上是如何在 C# 中正確重寫 Equals() 和 GetHashCode() 進行有效的物件比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板