比較和辨識 C# 列表之間的差異
有效地確定兩個清單之間的差異是 C# 程式設計中的常見任務。 .Except()
方法提供了一個強大的解決方案,但其應用可能有細微差別,特別是在處理自訂物件時。
將 .Except()
與引用型別相等一起使用
對於正確覆蓋 CustomObjects
和 Equals()
方法的自訂物件(例如 GetHashCode()
),使用 .Except()
很簡單:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
這將建立 list3
,其中包含 list1
中不在 list2
中的元素。
與 IEqualityComparer
更複雜的相等性檢查,例如基於特定屬性(如Id
)進行比較,需要實作IEqualityComparer<T>
介面。 這是一個例子:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) => co.Id.GetHashCode(); public bool Equals(CustomObject x1, CustomObject x2) => x1.Id == x2.Id; }</code>
然後,將此比較器與 .Except()
一起使用:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
處理重複元素
標準 .Except()
刪除重複項。 要保留它們,請使用以下替代方法:
<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
這利用 HashSet
進行有效的成員資格檢查,從而導致 list3
保留重複項。 請注意,list3
中元素的順序可能與原始 list1
不同。
以上是如何使用 .Except() 和 IEqualityComparer 有效找出 C# 中兩個清單之間的差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!