使用LINQ 建立包含轉換值的組合列表
在所呈現的場景中,您有兩個Person 物件列表,並且需要一個新列表結合了這些列表。對於相同的 Person 對象,合併的條目應保留其共用名稱,並擁有 list2 中的值,並且其變更應計算為 (list2.Value - list1.Value)。如果不存在重複,則變更應保持為零。
要達成此目的,請利用 LINQ Union 擴充方法。例如:
var mergedList = list1.Union(list2).ToList();
此操作合併兩個列表,消除重複項。預設情況下,Person 類別中定義的 Equals 和 GetHashCode 方法用於確定物件相等性。對於基於Name 等屬性的自訂比較,請重寫這些方法,如下所示:
public override bool Equals(object obj) { // Check if obj is convertible to Person var person = obj as Person; return Equals(person); } public override int GetHashCode() { return Name.GetHashCode(); } public bool Equals(Person personToCompareTo) { // Check for null or empty Name if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name)) return false; // Compare Names for equality return Name.Equals(personToCompareTo.Name); }
或者,定義一個實作IEqualityComparer 介面的比較器類,並將其作為Union 方法的第二個參數提供以進行自訂物件比較。有關更多詳細信息,請參閱 https://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx。
以上是如何使用 LINQ 在 C# 中組合兩個 Person 物件清單、處理重複項並計算差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!