我应该如何比较两个列表中的每个元素值?

时间:2013-08-23 05:41:28

标签: c# visual-studio-2010 tdd

在我的单元测试方法中,

我有两个清单。一个是 expectedValueList ,另一个是 actualvalueList

expectedValueList={a=1,b=2,c=3,d=4}

actualvalueList={d=4,b=2,c=3,a=1}

我只是通过这个来比较一个元素

CollectionAssert.AreEqual(expectedValueList.Select(x => x.a).ToList() ,actualvalueList.Select(x => x.a).ToList())

如何比较剩余的元素?

2 个答案:

答案 0 :(得分:1)

如果他们已经直接订购,您可以使用SequenceEqual

expectedValueList.SequenceEqual(actualvalueList);

如果它们不是有序的,那么在使用等于

的序列之前也可以应用排序
expectedValueList.OrderBy(x => x).SequenceEqual(actualvalueList.OrderBy(y => y));

实施例

List<int> l1 = new List<int> { 1, 2, 3, 4 };
List<int> l2 = new List<int> { 3, 1, 2, 4 };

if (l1.OrderBy(x => x).SequenceEqual(l2.OrderBy(y => y)))
{
     Console.WriteLine("List are equal"); // will write this
}

if (l1.SequenceEqual(l2))
{
     Console.WriteLine("List are equal"); 
}
else
{    
     Console.WriteLine("List are not equal"); // will write this    
}

答案 1 :(得分:0)

我期待它在评论中提到的List<int>而不是键值对。尝试这样的事情:

Assert.AreEqual(actualvalueList.Count(), expectedValueList.Count());
for(int i=0;i<actualvalueList.Count();i++)
{
   Assert.AreEqual(actualvalueList[i], expectedValueList[i]);
}

CollectionAssert.AreEqual(expectedValueList, actualvalueList);

修改

如果您不想比较一个值,请从列表中删除:

actualvalueList.Remove(actualvalueList.Select(x => x.d).FirstOrDefault())