处理多个对象列表时,经常需要将它们组合成一个内聚单元。在这种情况下,您有两个 Person 对象列表,并希望合并它们,如果存在重复项,则计算 Change 值作为它们各自值之间的差异。
为了实现此目的,LINQ 提供了一个强大的扩展方法:Union 。默认情况下,此方法根据 Person 类中定义的 Equals 和 GetHashCode 方法删除重复项。如果您的 Person 类没有重写这些方法或者您想要执行自定义比较,请按以下方法操作:
在您的 Person 中类,重写 Equals 和 GetHashCode 方法以根据所需属性比较对象,例如名称:
public override bool Equals(object obj) { // Convert object to a Person for comparison var person = obj as Person; if (person == null) return false; return Equals(person); } public override int GetHashCode() { return Name.GetHashCode(); } public bool Equals(Person personToCompareTo) { if (personToCompareTo == null) return false; if (string.IsNullOrEmpty(personToCompareTo.Name)) return false; return Name.Equals(personToCompareTo.Name); }
实现一个实现 IEqualityComparer 接口的比较器类。提供此比较器作为 Linq Union 扩展方法中的第二个参数:
// Implement IEqualityComparer<Person> public bool Equals(Person x, Person y) { // Your custom comparison here } public int GetHashCode(Person person) { // Your custom hash code generation here } var mergedList = list1.Union(list2, new MyPersonComparer());
以上是LINQ 的 Union 方法如何组合两个对象列表并处理重复项?的详细内容。更多信息请关注PHP中文网其他相关文章!