两个清单之间的差异

我有两个用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();

以上是 两个清单之间的差异 的全部内容, 来源链接: utcz.com/qa/401353.html

回到顶部