何可以将for语句转换为LINQ吗?如何将FOR语句转换为LINQ
假设我有一个方法。
public void Method_One(){
//...code...
//...code...
}
而且我必须多次调用这些代码,迭代次数也是我的参数。
for(int i = 0; i < numbers.Length; ++i){
Method_One();
}
我知道有foreach-statement的转换,但FOR怎么样?
何可以将for语句转换为LINQ吗?如何将FOR语句转换为LINQ
假设我有一个方法。
public void Method_One(){
//...code...
//...code...
}
而且我必须多次调用这些代码,迭代次数也是我的参数。
for(int i = 0; i < numbers.Length; ++i){
Method_One();
}
我知道有foreach-statement的转换,但FOR怎么样?
当你可以使用foreach
你可以使用永诺和for
也因此一个简单的LINQ(asuming numbers
是List
):否则,它使用IEnumerable<T>.ToList()
之前转换到一个列表。
numbers.ForEach(Method_One)
即相当于
numbers.ForEach(x => Method_One());
而且也:
foreach(int i in numbers) Method_one();
您可以使用:
numbers.ForEach(num =>
{
MethodOne();
});
如果你需要将CURENT号传递到功能,它将是
MethodOne(num);
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);
什么是ForEach这里? – ASh
嗯,'IEnumerable
如果你想使用ForEach,你可以添加'ToList()',但它仍然是一个过度杀伤 –
如果你想力 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);
环路远远更好代码。
为什么标记ReSharper?该工具应该告诉你如何转换它。 – HimBromBeere
LINQ不是'for/foreach'替换。用于查询,而不是调用动作。 –