简化迭代到 linq 查询

我目前正在开发 .NET 4.7.1 应用程序。给定一个 for 循环来比较 2 个列表并检查是否有任何 Id 已更改。如果列表 1 中的任何 Id 与列表 2 中的任何 Id 不同,我需要返回 null,否则返回列表 2。


我目前通过简单的迭代解决了这个问题。尽管如此,我想知道是否可以使用 LINQ 语句更轻松地解决这个问题。


var list1 = new List<string>

{

  "A",

  "B",

  "C"

};


var list2 = new List<string>

{

  "A",

  "C",

  "B"

};


private List<string> Compare(){


 if (list1 != null)

 {

    for (int i = 0; i < list1.Count; i++)

    {

        if (list1[i] != list2[i])

        {

            return list2;

        }

    }

    return null;

 }


 return list2;

}

您知道如何解决这个问题而不是使用 for 循环,而是使用 LINQ 语句吗?


谢谢!


大话西游666
浏览 95回答 2
2回答

杨魅力

这是 For 循环的一种 linq 替代方案&nbsp; &nbsp;private List<string> Compare()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (list1 == null) return list2;&nbsp; &nbsp; &nbsp; &nbsp; if (list1.Where((x, i) => x != list2[i]).Any())&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return list2;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; }

一只名叫tom的猫

您可以使用Zip将项目分组在一起来比较它们,然后All确保它们相同:private List<string> Compare(){&nbsp;if (list1 == null) return list2;&nbsp;if (list1.Count != list2.Count) return null;&nbsp;bool allSame = list1.Zip(list2, (first, second) => (first, second))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.All(pair => pair.first == pair.second);&nbsp;return allSame ? list2 : null;}注意:该Zip函数用于将两个项目放入一个元组中(第一个,第二个)。您还可以使用SequenceEqualprivate List<string> Compare(){&nbsp;if (list1 == null) return list2;&nbsp;bool allSame = list1.SequenceEqual(list2);&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;return allSame ? list2 : null;}
打开App,查看更多内容
随时随地看视频慕课网APP