C#(Linq to Objects)中是否存在std :: for_each算法模拟,能够将Func<>
传递给它?像在C#(Linq to Objects)中是否存在std :: for_each算法模拟
sequence.Each(p => p.Some());
代替
foreach(var elem in sequence)
{
elem.Some();
}
C#(Linq to Objects)中是否存在std :: for_each算法模拟,能够将Func<>
传递给它?像在C#(Linq to Objects)中是否存在std :: for_each算法模拟
sequence.Each(p => p.Some());
代替
foreach(var elem in sequence)
{
elem.Some();
}
C#语言本身有一个foreach
声明。
作为Jon hints(和Eric explicitly states),LINQ设计人员希望保持方法无副作用,而ForEach
会打破此合同。
有实际是一个ForEach
方法,做在List<T>
和Array
类适用给出断言,但它是在.NET Framework 2.0中引入LINQ只有3.5来了。他们不相关。
毕竟,你可以随时come up with your own extension method:
public static void ForEach<T> (this IEnumerable<T> enumeration, Action<T> action)
{
foreach (T item in enumeration)
action (item);
}
我同意这是非常有用的情况下,你已经有了一个参数的方法,你想运行它的每个元素。
var list = new List<int> {1, 2, 3, 4, 5};
list.Where (n => n > 3)
.ForEach (Console.WriteLine);
但是在其他情况下,我相信好醇” foreach
是更清洁,简洁。
顺便说一句,单参数无效方法不是Func<T>
而是Action<T>
。
Func<T>
表示返回T
的函数,Action<T>
表示接受T
的void
方法。
System.Collections.Generic.List<T>
有一个方法void ForEach(Action<T> action)
其执行每每个列表项所提供的委托。 Array
类也暴露了这样一种方法。
[LINQ相当于foreach for IEnumerable](http://stackoverflow.com/questions/200574/linq-equivalent-of-foreach-for-ienumerablet) –
jdehaan
2011-02-06 07:47:34
的可能重复?是的,谢谢..这就是preatty多回答我的问题! – 2011-02-06 08:31:28