在 .NET 中比較引用類型時,請務必理解引用相等和值相等之間的差異。引用相等檢查兩個引用是否指向同一對象,而值相等檢查對像是否具有相同的資料。
重寫相等運算子 (==) 和 Equals 方法
除非型別表示值語意(即,基於其資料視為相等的不可變物件),否則不建議重寫相等運算子 (==) 和/或 Equals 方法來比較參考型別。在這種情況下,請考慮實作 System.IEquatable
IEquatable 介面
如果您的引用類型表示值語義,則實作 System.IEquatable
IComparable 介面
IComparable 主要設計用於值類型,而不是引用類型。避免將其用於引用類型。
自訂比較
與其重寫相等運算子或實作 IComparable,不如考慮建立一個自訂方法來比較參考類型。使用 Equals 方法檢查物件標識並重寫它以比較相關的屬性。
值相等的範例
以下是為 Point 類別實作值相等的範例:
class Point : IEquatable<Point> { public int X { get; } public int Y { get; } public Point(int x = 0, int y = 0) { X = x; Y = y; } public bool Equals(Point other) { if (other is null) return false; return X.Equals(other.X) && Y.Equals(other.Y); } public override bool Equals(object obj) => Equals(obj as Point); public static bool operator ==(Point lhs, Point rhs) => object.Equals(lhs, rhs); public static bool operator !=(Point lhs, Point rhs) => !(lhs == rhs); public override int GetHashCode() => HashCode.Combine(X, Y); }
結論
對於具有值語意的參考類型,請實作 System.IEquatable
以上是如何最好地比較 .NET 中的參考類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!