gpt4 book ai didi

c# - 两个列表之间的区别

转载 作者:IT王子 更新时间:2023-10-29 03:35:39 27 4
gpt4 key购买 nike

我有两个填充了 CustomsObjects 的通用列表。

我需要在第三个列表中检索这两个列表之间的差异(第一个列表中的项目没有第二个列表中的项目)。

我在想使用 .Except() 是个好主意,但我不知道如何使用它。帮助!

最佳答案

使用 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();

关于c# - 两个列表之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5636438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com