使用 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中文网其他相关文章!