最佳實踐:比較 C# 中的兩個引用類型實例
比較引用型別時,務必明確預期行為:值相等還是引用同一性。
重寫相等運算子 ("==") 和 Equals 方法以實現引用同一性
過去,開發人員會重寫 "==" 和 Equals 方法來檢查引用同一性。但是,編碼標準建議不要這樣做,因為它可能會在某些情況下導致歧義。
選項 1:相等為值實作 IEquatable
對於具有值語意的參考型別(其中等價性被視為相等性的不可變型別),建議的方法是實作 System.IEquatable
範例:
<code class="language-csharp">class Point : IEquatable<Point> { // ... public bool Equals(Point other) { return X.Equals(other.X) && Y.Equals(other.Y); } // ... }</code>
選項 2:使用型別檢查的自訂 Equals 方法實作值相等
如果您喜歡自訂 Equals 方法,請確保它同時檢查引用相等性和被比較物件的類型。這可以防止在比較派生類別物件時出現意外行為。
範例:
<code class="language-csharp">public bool Equals(Point other) { if (other is null) return false; if (other.GetType() != GetType()) return false; return X.Equals(other.X) && Y.Equals(other.Y); }</code>
何時使用引用同一性
不要為不表示不可變值的引用類別實作 "==" 和 "!=" 運算子。相反,依賴它們預設的比較對象同一性的行為。
以上是我應該如何比較 C# 中引用類型的兩個實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!