高效比較複雜物件
在處理包含多層子物件的複雜物件時,確定相等性可能是一項耗時的任務。為了在C# 4.0中最佳化此過程,最有效的方法是在所有自訂類型中實作IEquatable
實作IEquatable
對於每個自訂類型(包括根物件Object1和Object2),實作IEquatable
重寫Equals方法
在Equals方法中,遞歸呼叫所有子物件的Equals方法。對於包含的集合,使用SequenceEqual擴展方法來有效地比較元素。確保所有引用都正確處理,以避免空引用異常。
值型別與引用相等性
對於值型,直接呼叫Equals方法。對於參考類型,首先使用ReferenceEquals檢查引用相等性。如果未建立引用相等性,請檢查實例的欄位或屬性是否為null,然後繼續呼叫它們的Equals方法。
範例
考慮一個簡化的範例,其中包含三層巢狀:Person、Address和City。 Person類別實作IEquatable,並具有遞歸比較邏輯:
<code class="language-csharp">public class Person : IEquatable<Person> { public int Age { get; set; } public string FirstName { get; set; } public Address Address { get; set; } public bool Equals(Person other) { return Age.Equals(other.Age) && FirstName?.Equals(other.FirstName) == true && Address?.Equals(other.Address) == true; } }</code>
可以為Address和City類別提供類似的實作。 注意使用了?.運算子來處理可能為null的引用,避免異常。
更新:標誌與等價性
請注意,提供的解決方案假定等價性比較。但是,對於可變類型,可能更適合基於標識而不是等價性來實現IEquality
以上是如何有效比較 C# 中的複雜嵌套物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!