使用LINQ转换带索引的for循环

时间:2019-05-17 12:16:10

标签: c# linq

我是C#语言的新手,我已经开始学习LINQ 所以我只想使用linq转换代码。有什么办法可以做。当前的实现方式不是时尚的。

var list = new List<int>();
for (int index = 0; index < contentList.Count; index++)
{
    list.Add(MyClass.GetCorrespondence(module, index));
}
return list;

5 个答案:

答案 0 :(得分:5)

可以这样写:

var list = contentList.Select((_, i) => MyClass.GetCorrespondence(module, i)).ToList();

或类似的

var list = Enumerable.Range(0,contentList.Count).Select(i => MyClass.GetCorrespondence(module, i)).ToList();

但是,老实说,两者都不做!您的代码是完全可读的。

答案 1 :(得分:3)

如果必须为此使用LINQ,则可以对Select使用重载,它“通过合并元素的索引将序列的每个元素投影到新形式中”。例如:

list.AddRange(contentList.Select((c, index) => MyClass.GetCorrespondence(c, index));

https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.select?view=netframework-4.8

答案 2 :(得分:1)

如果您迫切希望使用Linq进行操作,则可以尝试:

list.AddRange(Enumerable.Range(0, contentList.Count).Select(index => MyClass.GetCorrespondence(module, index)))

或:

list = Enumerable.Range(0, contentList.Count).Select(index => MyClass.GetCorrespondence(module, index)).ToList();

答案 3 :(得分:1)

此方法有效:

var result= contentList.Select((paramter,index)=>MyClass.GetCorrespondence(module,index)).ToList();

答案 4 :(得分:-1)

您还可以使用ForEach LINQ语句。

contentList.ForEach(x => list.Add(MyClass.GetCorrespondence(module, x)));

编辑:为什么这个被否决?