我可以将for语句转换为LINQ吗?
假设我有一个方法。
public void Method_One(){
//...code...
//...code...
}
我必须多次调用这些代码,迭代次数也将是我的参数。
for(int i = 0; i < numbers.Length; ++i){
Method_One();
}
我知道foreach-statement有转换但是FOR怎么样?
答案 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(假设numbers
是List
):否则将其转换为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);