如何将For语句转换为LINQ

时间:2016-04-21 06:30:41

标签: c# linq visual-studio for-loop resharper

我可以将for语句转换为LINQ吗?

假设我有一个方法。

public void Method_One(){
     //...code...
     //...code...
}

我必须多次调用这些代码,迭代次数也将是我的参数。

for(int i = 0; i < numbers.Length; ++i){
    Method_One();
}

我知道foreach-statement有转换但是FOR怎么样?

4 个答案:

答案 0 :(得分:3)

Enumerable.Range(0, numbers.Length).ToList().ForEach(arg => Method_One());

与@Ivan Stoev达成一致,它仍然是一个关于使用linq做事的方式。

而不是Linq,一个简单的辅助静态方法应该使它更具可读性。

public static void Repeater(int count, Action action)
{
    Debug.Assert(action!=null);
    for (int i = 0; i < count; i++)
        action();
}

//Use it like this
Repeater(10, Method_One);

答案 1 :(得分:2)

如果您想强制 Linq做某事,那么实现

  Enumerable
    .Range(0, numbers.Length)
    .Select(item => {
       Method_One(); // you may want Method_One(item);

       return 0; // you have to return something
     })
    .ToList(); // materialization, to make Linq do

但是,Linq 尚未设计用于此类用途,因此查询看起来像丑陋。像

这样的循环
  foreach (var item in numbers)
    Method_One(); // you may want Method_One(item);

更好的代码。

答案 2 :(得分:0)

当你可以使用foreach时,你总是可以使用for,因此一个简单的LINQ(假设numbersList):否则将其转换为List之前使用IEnumerable<T>.ToList()

numbers.ForEach(Method_One)

相当于

numbers.ForEach(x => Method_One());

还有:

foreach(int i in numbers) Method_one();

答案 3 :(得分:0)

您可以使用:

numbers.ForEach(num =>
{
  MethodOne();
});

如果你需要将当前的数字传递给函数,它将是

MethodOne(num);