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