利用 .Except() 比较 C# 中的自定义对象列表
在C#开发中,我们经常遇到需要比较和操作列表的场景。一项常见任务是识别一个列表中存在但另一个列表中不存在的唯一元素。 .NET 框架的 .Except()
方法为此提供了一个优雅的解决方案。
使用 .Except() 自定义相等比较
使用自定义对象时,定义相等性至关重要。如果您的 CustomObject
类已经覆盖 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> { // Implement GetHashCode and Equals methods based on ID property... }</code>
然后,使用带有 .Except()
的自定义比较器:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
解决重复条目
.Except()
本身会删除重复元素。要在结果列表中保留重复项,请考虑将第二个列表转换为 HashSet
并采用过滤方法:
<code class="language-csharp">var set2 = list2.ToHashSet(); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
总结
.Except()
方法提供了一种简单有效的方法来查找包含自定义对象的两个列表之间的集合差异。 通过实现自定义相等比较或根据需要处理重复项,您可以使此方法适应不同的比较要求。
以上是如何使用 .Except() 查找 C# 中自定义对象列表之间的差异?的详细内容。更多信息请关注PHP中文网其他相关文章!