C#中泛型自定义对象列表差异提取
假设您有两个列表,每个列表都包含自定义对象,您需要一种方法来获取第三个列表,该列表只包含第一个列表中存在但第二个列表中不存在的元素。
为此,.Except()
方法是一个合适的选项。此方法假设您的自定义对象实现了 Equals
和 GetHashCode
方法,从而提供了一种定义对象相等性的方法。使用 .Except()
方法很简单:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
但是,如果您需要基于特定属性(例如 ID)自定义定义相等性,则可以定义一个 IEqualityComparer<T>
实现。请考虑以下示例:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) { if (co == null) { return 0; } return co.Id.GetHashCode(); } public bool Equals(CustomObject x1, CustomObject x2) { if (object.ReferenceEquals(x1, x2)) { return true; } if (object.ReferenceEquals(x1, null) || object.ReferenceEquals(x2, null)) { return false; } return x1.Id == x2.Id; } }</code>
在这种情况下,您可以使用以下代码来检索两个列表之间的差异:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
对于存在重复项的情况,请考虑从第二个列表创建一个集合,并使用以下方法:
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
这将确保在结果列表中保留重复项。
以上是如何在 C# 中高效查找两个自定义对象列表之间的差异?的详细内容。更多信息请关注PHP中文网其他相关文章!