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