使用 Linq 合并对象列表
可以使用 LINQ 扩展方法将两个列表组合成具有特定条件的新列表。让我们考虑以下场景:
class Person { string Name; int Value; int Change; } List<Person> list1; List<Person> list2;
我们想要创建一个新的 List
使用并集方法
LINQ 中的 Union 方法提供了一种合并两个列表并删除重复项的简单方法。例如:
var mergedList = list1.Union(list2).ToList();
这将创建一个结合了 list1 和 list2 的新 mergedList,并且任何重复的项目都将被排除。
Equals 和 GetHashCode 的自定义比较
如果默认基于Equals和GetHashCode的对象比较不能满足我们的要求,我们需要重写Person类中的这些方法。例如,以下是如何使 Name 属性的比较不区分大小写:
public override bool Equals(object obj) { var person = obj as Person; return Equals(person); } public override int GetHashCode() { return Name.ToLower().GetHashCode(); } public bool Equals(Person personToCompareTo) { return Name.ToLower() == personToCompareTo.Name.ToLower(); }
使用自定义比较器
或者,我们可以定义一个自定义比较器实现 IEqualityComparer 接口的类。然后,我们可以将此比较器作为第二个参数提供给 Union 方法:
var comparer = new PersonComparer(); var mergedList = list1.Union(list2, comparer).ToList();
有关自定义比较器的更多信息,请参阅 MSDN 文档。
以上是如何使用 LINQ 在 C# 中合并两个对象列表、处理重复项和自定义比较?的详细内容。更多信息请关注PHP中文网其他相关文章!