高效比較C#複雜物件
問題:
比較包含多層子物件的複雜物件可能很棘手。確定確保相等性的最佳方法對於性能和準確性至關重要。
解:
在自訂類型上實作IEquatable<T>
接口,並重寫繼承的Object.Equals
和Object.GetHashCode
方法,為複雜物件的比較提供了最快捷、最量身定制的解決方案。
詳情:
對於值型,可以直接呼叫Equals
方法。對於引用類型,則需要結合多種檢查以確保效率:
ReferenceEquals
:驗證引用是否指向相同物件。 NullReferenceException
。 IEquatable<T>.Equals
:繞過重寫的Object.Equals
方法,提高速度。 範例:
<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 override bool Equals(Person other) { return this.Age.Equals(other.Age) && ( object.ReferenceEquals(this.FirstName, other.FirstName) || this.FirstName != null && this.FirstName.Equals(other.FirstName) ) && ( object.ReferenceEquals(this.Address, other.Address) || this.Address != null && this.Address.Equals(other.Address) ); } }</code>
替代方法:
IEquatable<T>
慢且通用性差。 注意事項:
IEquatable<T>
。 Object.GetHashCode
以根據已實現的Equals
方法提供合適的雜湊碼。 IEquatable<T>
,以防止依賴於標識的集合中出現不一致的行為。 以上是如何在 C# 中高效比較複雜物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!