2016-04-21 84 views
-1

何可以将for语句转换为LINQ吗?如何将FOR语句转换为LINQ

假设我有一个方法。

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

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

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

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

+0

为什么标记ReSharper?该工具应该告诉你如何转换它。 – HimBromBeere

+0

LINQ不是'for/foreach'替换。用于查询,而不是调用动作。 –

回答

0

当你可以使用foreach你可以使用永诺和for也因此一个简单的LINQ(asuming numbersList):否则,它使用IEnumerable<T>.ToList()之前转换到一个列表。

numbers.ForEach(Method_One) 

即相当于

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

而且也:

foreach(int i in numbers) Method_one(); 
0

您可以使用:

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

如果你需要将CURENT号传递到功能,它将是

MethodOne(num); 
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); 
+0

什么是ForEach这里? – ASh

+1

嗯,'IEnumerable '没有'ForEach'方法。 –

+1

如果你想使用ForEach,你可以添加'ToList()',但它仍然是一个过度杀伤 –

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); 

环路远远更好代码。