基本上我想执行以下操作:
List<myClass> list1;
List<myClass> list2;
List<myClass> listOfDifferences;
...
for (int i = 0; i < list1.Count; i++ )
{
if (list1[i].myAwesomeProperty != list2[i].myAwesomeProperty)
{
listOfDifferences.Add(list1[i]);
}
}
有没有不使用for循环的方法?就我而言,我知道两个列表是相同的,只有对象的一个属性的值可以变化。除此之外,每个列表以相同的顺序容纳相同数量的对象。 据我所知,如果在这种情况下可以使用LINQ,那将是更好的选择,对吧?
答案 0 :(得分:3)
如果可以保证订购,那么通过将两个列表压缩在一起,可以执行以下操作:
var diffs = list1.Zip(list2, (item1, item2) => (item1, item2))
.Where(x => x.item1.myAwesomeProperty != x.item2.myAwesomeProperty)
.Select(x => x.item1); //.ToList()
如果在您的语言级别上ValueTuple
不可用,请改用匿名对象:
var diffs = list1.Zip(list2, (item1, item2) => new{item1, item2})
.Where(x => x.item1.myAwesomeProperty != x.item2.myAwesomeProperty)
.Select(x => x.item1); //.ToList()