首页 > 后端开发 > C++ > 如何在 C# 中高效查找两个自定义对象列表之间的差异?

如何在 C# 中高效查找两个自定义对象列表之间的差异?

Patricia Arquette
发布: 2025-01-23 00:44:11
原创
771 人浏览过

How Can I Efficiently Find the Difference Between Two Lists of Custom Objects in C#?

C#中泛型自定义对象列表差异提取

假设您有两个列表,每个列表都包含自定义对象,您需要一种方法来获取第三个列表,该列表只包含第一个列表中存在但第二个列表中不存在的元素。

为此,.Except() 方法是一个合适的选项。此方法假设您的自定义对象实现了 EqualsGetHashCode 方法,从而提供了一种定义对象相等性的方法。使用 .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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板