客製化物件比較以區分清單
在處理包含自訂物件的兩個泛型清單時,提取一個清單中(特別是不存在於另一個清單中)的唯一元素是一個有用的操作。
.Except()
方法為此提供了一個有效的解決方案。它接受兩個列表參數,並傳回一個新列表,其中包含在第一個列表中但在第二個列表中找不到的項目。
重寫相等性與預設比較
如果您的自訂物件類型重寫了 Equals()
和 GetHashCode()
方法,您可以如下使用 .Except()
:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
在這種情況下,物件的比較依賴於其重寫的方法。任何相等性差異都將反映在列表之間的差異中。
自訂相等性比較器
但是,如果您的相等性標準需要自訂實現,您可以定義自己的 IEqualityComparer<T>
。這是一個使用 ID 作為比較基礎的範例:
<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject> { // ... (实现如提供的答案中所示) }</code>
隨後,您可以透過以下方式將此自訂比較器與 .Except()
一起使用:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
這種客製化的比較將確保 .Except()
操作符合您的特定相等性要求。
保留重複項
值得注意的是,.Except()
將排除重複元素。如果需要保留重複項,另一種方法是將第二個清單轉換為 HashSet
並使用以下方法:
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
此方法將保留結果清單 list3
中的所有唯一元素,包括重複項。
以上是如何在 C# 中有效地找到兩個自訂物件清單之間的不同元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!