C#中泛型自訂物件清單差異擷取
假設您有兩個列表,每個列表都包含自訂對象,您需要一種方法來獲取第三個列表,該列表只包含第一個列表中存在但第二個列表中不存在的元素。
為此,.Except()
方法是一個合適的選項。此方法假設您的自訂物件實作了 Equals
和 GetHashCode
方法,從而提供了一種定義物件相等性的方法。使用 .Except()
方法很簡單:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
但是,如果您需要基於特定屬性(例如 ID)自訂定義相等性,則可以定義一個 IEqualityComparer<T>
實作。請考慮以下範例:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) { if (co == null) { return 0; } return co.Id.GetHashCode(); } public bool Equals(CustomObject x1, CustomObject x2) { if (object.ReferenceEquals(x1, x2)) { return true; } if (object.ReferenceEquals(x1, null) || object.ReferenceEquals(x2, null)) { return false; } return x1.Id == x2.Id; } }</code>
在這種情況下,您可以使用以下程式碼來檢索兩個清單之間的差異:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
對於存在重複項的情況,請考慮從第二個清單建立一個集合,並使用以下方法:
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
這將確保在結果清單中保留重複項。
以上是如何在 C# 中高效找到兩個自訂物件清單之間的差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!