比较两个List <objects> </objects>

时间:2014-03-04 20:42:31

标签: c# linq

比较2 List<MyClasses>的最佳途径是什么?

列表2可以包含比列表1更多的值,这是可以的。只需要确保列表2包含列表1中的所有内容。它们的顺序也不一样。

4 个答案:

答案 0 :(得分:6)

您可以使用Except查找两个集合的集合差异。

var hasAllItems = !list2.Except(list1).Any();

答案 1 :(得分:1)

如果list2不包含list1中的项目,则会通知您:

list1.Any(x => !list2.Contains(x));

你可以将它放在变量中,这样你就不必考虑双重否定:

var list2ContainsList1 = !list1.Any(x => !list2.Contains(x));

答案 2 :(得分:1)

一种方法:

List1.All(o => List2.Contains(o));

这表示“当且仅当列表1中的每个项目都包含在列表2中时才返回true”

答案 3 :(得分:1)

最简单的方法是使用Except(在您的情况下,您不关心列表中元素的顺序):

var elementsInList2NotInList1 = list2.Except(list1);

请记住,此方法使用default equality comparer来比较值。如果你关心元素的排序,你需要做额外的工作,以便检查列表的每个元素如何等于另一个列表的元素。额外的工作如下:

  1. 创建自己的比较器,实现接口IEqualityComparer;
  2. 为自定义数据类型创建自己的Equals()GetHashCode()方法。