是否有一个列表可以比较两个列表之间的项目属性?

时间:2018-10-11 11:48:41

标签: c# list linq

基本上我想执行以下操作:

        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,那将是更好的选择,对吧?

1 个答案:

答案 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()