使用 LINQ 合并两个对象列表
在管理数据等场景中,您可能会遇到需要组合多个对象列表的情况。让我们考虑一个特定的实例,其中有两个 Person 对象列表:
<br>class Person<br>{<pre class="brush:php;toolbar:false">string Name; int Value; int Change;
}
List< ;人> list1;
列表; list2;
我们的目标是将这两个列表合并为一个新的 List
使用 Linq Union 方法
合并这些列表的一种简单方法是使用 Linq 扩展方法 Union 。此方法组合两个序列的元素并返回一个新序列。例如:
<br>var mergedList = list1.Union(list2).ToList();<br>
默认情况下,Union 方法使用 Person 类的 Equals 和 GetHashCode 方法来确定重复元素。但是,如果您想根据特定属性(例如姓名)比较人员,您可以重写 Person 类中的这些方法。
/// <summary> /// Checks if the provided object is equal to the current Person /// </summary> /// <param name="obj">Object to compare to the current Person</param> /// <returns>True if equal, false if not</returns> public override bool Equals(object obj) { // Try to cast the object to compare to to be a Person var person = obj as Person; return Equals(person); } /// <summary> /// Returns an identifier for this instance /// </summary> public override int GetHashCode() { return Name.GetHashCode(); } /// <summary> /// Checks if the provided Person is equal to the current Person /// </summary> /// <param name="personToCompareTo">Person to compare to the current person</param> /// <returns>True if equal, false if not</returns> public bool Equals(Person personToCompareTo) { // Check if person is being compared to a non person. In that case always return false. if (personToCompareTo == null) return false; // If the person to compare to does not have a Name assigned yet, we can't define if it's the same. Return false. if (string.IsNullOrEmpty(personToCompareTo.Name) return false; // Check if both person objects contain the same Name. In that case they're assumed equal. return Name.Equals(personToCompareTo.Name); }
或者,您可以创建一个实现 IEqualityComparer 的比较器类界面来定义您自己的比较标准。然后,您可以将此比较器指定为 Union 方法中的第二个参数。
以上是如何使用 LINQ 合并两个 Person 对象列表,通过组合值和计算变化来处理重复项?的详细内容。更多信息请关注PHP中文网其他相关文章!