2011-02-06 71 views
3

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

[LINQ相當於foreach for IEnumerable ](http://stackoverflow.com/questions/200574/linq-equivalent-of-foreach-for-ienumerablet) – jdehaan 2011-02-06 07:47:34

+0

的可能重複?是的,謝謝..這就是preatty多回答我的問題! – 2011-02-06 08:31:28

回答

6

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>表示接受Tvoid方法。

3

System.Collections.Generic.List<T>有一個方法void ForEach(Action<T> action)其執行每每個列表項所提供的委託。 Array類也暴露了這樣一種方法。