首頁 > 後端開發 > C++ > 如何最好地比較 C# 中的引用類型?

如何最好地比較 C# 中的引用類型?

Mary-Kate Olsen
發布: 2025-01-07 17:42:46
原創
157 人瀏覽過

How to Best Compare Reference Types in C#?

C# 引用型別比較的最佳實務

處理引用類型時,通常需要比較其值而不是其引用。雖然重寫相等運算子 (==) 或 Equals 方法是一種常見做法,但為了確保正確有效地比較引用類型,也應考慮其他方法。

實作 System.IEquatable 介面

對於引用型別中的值語意(其中等價表示相等),建議使用 System.IEquatable 介面。此介面提供強型別 Equals 方法,可實現深度值比較。透過實作 IEquatable,您可以確保相等檢查應用於物件的實際值,而不僅僅是它們的參考。

範例:

考慮實現值相等的類別:

<code class="language-csharp">class Point : IEquatable<Point> {
    public Point(int x, int y) => (X, Y) = (x, y);
    public int X { get; }
    public int Y { get; }

    public bool Equals(Point other) =>
        X == other.X && Y == other.Y;

    public static bool operator ==(Point lhs, Point rhs) =>
        lhs.Equals(rhs);

    public static bool operator !=(Point lhs, Point rhs) =>
        !lhs.Equals(rhs);

    public override bool Equals(object obj) =>
        Equals(obj as Point);
}</code>
登入後複製

重寫物件相等方法

對於不表示不可變值的參考類型,不建議重寫 Object 類別中 Equals 的預設實作。預設實作比較物件引用,這並非總是理想的。相反,請考慮對深度值比較使用 IEquatable 介面。

GetHashCode 重寫

在為參考型別實現相等性時,重寫 GetHashCode() 方法也至關重要。它確保具有相同值的物件具有相同的雜湊程式碼,從而提高在使用雜湊集合(如字典)時的效能。

實作細節:

在程式碼範例中,Equals 方法執行空值檢查,然後執行類型檢查以確保要比較的物件是相同類型。實際的值比較是在每個屬性上執行的。

GetHashCode 方法使用 HashCode.Combine() 方法組合 X 和 Y 屬性的雜湊程式碼,確保為具有相同值的物件產生一致的雜湊程式碼。

透過遵守這些最佳實踐,開發人員可以有效且正確地比較引用類型,確保相等操作與物件的預期語義一致。

以上是如何最好地比較 C# 中的引用類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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