我是C#语言的新手,我已经开始学习LINQ 所以我只想使用linq转换代码。有什么办法可以做。当前的实现方式不是时尚的。
var list = new List<int>();
for (int index = 0; index < contentList.Count; index++)
{
list.Add(MyClass.GetCorrespondence(module, index));
}
return list;
答案 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)));
编辑:为什么这个被否决?