如何排除属性然后比较列表

时间:2013-08-23 08:36:37

标签: c# visual-studio-2010 c#-4.0 tdd

在我的单元测试方法中创建了两个对象列表

即一个是expectedValueList,另一个是actualvalueList

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

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

我在比较

CollectionAssert.AreEqual(expectedValueList, actualvalueList);

我需要从列表中排除"c" property然后我想比较两个列表是否相同?

2 个答案:

答案 0 :(得分:1)

假设两个列表都是List<CustomType>,其中CustomType有两个属性。现在您需要一种方法来比较两个列表但忽略一个值。

如果订单很重要,我会使用Enumerable.SequenceEqual

var expectedWithoutC = expectedValueList.Where(t => t.Name != "c");
var actualWithoutC = actualvalueList.Where(t => t.Name != "c");
bool bothEqual = expectedWithoutC.SequenceEqual(actualWithoutC); 

请注意,如果我的推定是正确的,您需要覆盖Equals(和GetHashCode)。否则SequenceEqual将只比较参考相等。

答案 1 :(得分:0)

假设expectedValueListDictionary<string, int>

var expectedValueList = new SortedDictionary<string, int> { { "a", 1 }, { "b", 2 }, { "c", 3 }, { "d", 4 } };
expectedValueList.Remove("c");

var actualValueList = new SortedDictionary<string, int> { { "d", 4 }, { "b", 2 }, { "c", 3 }, { "a", 1 } };
actualValueList.Remove("c");

// Will return false if the order is different.
CollectionAssert.AreEqual(expectedValueList, actualvalueList);