您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

两个清单之间的差异

两个清单之间的差异

使用Except是完全正确的方法。如果您的类型覆盖EqualsGetHashCode,或者您只对引用类型相等感兴趣(即,如果两个引用引用完全相同的对象,则两个引用仅是“相等”),您可以使用:

var list3 = list1.Except(list2).ToList();

如果您需要表达自定义相等性想法(例如,通过ID),则需要实现IEqualityComparer<T>。例如:

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;
    }
}

然后使用:

var list3 = list1.Except(list2, new IdComparer()).ToList();

请注意,这将删除所有重复的元素。如果您需要保留重复项,则可能最容易从中创建一个集合list2并使用类似方法

var list3 = list1.Where(x => !set2.Contains(x)).ToList();
其他 2022/1/1 18:18:59 有496人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶