使用Linq 從兩個物件清單建立清單
考慮以下場景:
class Person { string Name; int Value; int Change; } List<Person> list1; List<Person> list2;
目標是將兩下個列表組合成一個新的列表
解決方案:
Linq 方法 Union 非常適合此任務:
var mergedList = list1.Union(list2).ToList();
這個操作合併兩個列表,刪除重複項。預設情況下,它將呼叫 Person 類別中定義的 Equals 和 GetHashCode 方法。但是,如果不重寫這些方法,它們可能無法有效地比較我們的自訂物件(例如,使用 Name 屬性進行比較)。
重寫Equals 和GetHashCode:
為了確保按名稱進行準確比較,請將方法重寫為如下:
public override bool Equals(object obj) { var person = obj as Person; return Equals(person); } public override int GetHashCode() { return Name.GetHashCode(); } public bool Equals(Person personToCompareTo) { if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name)) return false; return Name.Equals(personToCompareTo.Name); }
自訂比較器:
或者,建立一個實現IEqualityComparer 介面的自訂比較器。此比較器可以作為 Union 方法的第二個參數提供。有關自訂比較器的更多信息,請訪問:http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx。
以上是如何使用 LINQ 合併兩個 Person 物件清單並根據名稱匹配處理屬性更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!