如何比较C#3.0中的两个通用列表?

问题描述:

可能重复:
Is there a built-in method to compare collections in C#?如何比较C#3.0中的两个通用列表?

什么是比较在C#3.0泛型两个通用列出了最好的方法是什么?

+0

比较它们什么? – 2010-02-16 05:05:27

如果要比较两个序列在.net 3.5及以后的(这是其C#3.0的船舶与框架的版本),那么你就应该使用SeqenceEqual extension method on the Enumerable class in the System.Linq namespace

但是,为此,它将在它正在比较的IEnumerable<T>实现中使用类型参数T的默认相等比较器。

如果您想要更改平等检查的方式,那么您应该将IEqualityComparer<T>的实现传递给SequenceEqual方法,以在比较每个序列中的项时使用。

另外,如果你想看看如果两个是相等的(如IEnumerable<T>表示),那么最好的办法是检查使用Except extension method on the Enumerable class并确保结果集没有任何条目,两个IEnumerable<T>实现具有相同数量的条目(因为除非可以返回空序列,即使传递给它的长度序列不同),您可以使用Count extension method执行该操作。

看看这answer,它提供了一种方法,确定两个序列是否包含相同的元素。

如果你想不管元素的顺序进行比较,尝试UnorderedEqual <牛逼>方法从这里开始:

否则:

var list1 = new List<int> { 1, 2, 3 }; 
var list2 = new List<int> { 1, 2, 3 }; 
var areSame = Enumerable.SequenceEqual(list1, list2); 
+0

cxfx:海报表示他们使用的是C#3.0,这意味着.NET 3.5具有将IEnumerable 实现与集合进行比较所需的大多数工具,或者作为有序的序列,列表相等链接对解决方案没有多大作用。 – casperOne 2010-02-16 05:12:10

+0

感谢您的回答,我需要实现IEqualityCompairer接口来做我自己的比较。清单是: ListA ,ListB ; “myObject”是相当复杂的对象,我需要比较几个属性。这就是为什么我需要一个自定义比较器。另外这些列表是两个字典的值。所以我的数据模型是这样的: Dictionary >将与Dictionary >进行比较。键是好的,但我得到了这两个字典的值的问题 感谢您的回复 Morz – Ninja 2010-02-17 11:14:29

+0

是的,元素顺序不是问题 – Ninja 2010-02-17 11:15:11