受到另外一個詢問缺乏Zip
功能的問題的啓發: 框架
爲何Enumerable
類中沒有ForEach
擴展方法? 仍是在任 獲取ForEach
方法的惟一類是List<>
。 有沒有理由錯過(表演)? this
大多數LINQ擴展方法都返回結果。 ForEach不適合這種模式,由於它什麼都不返回。 spa
在LINQ以前添加了ForEach方法。 若是添加ForEach擴展,因爲擴展方法約束,它將永遠不會爲List實例調用。 我認爲沒有添加它的緣由是不干擾現有的。 code
可是,若是你真的錯過這個小功能,你能夠推出本身的版本 ip
public static void ForEach<T>( this IEnumerable<T> source, Action<T> action) { foreach (T element in source) action(element); }
我一直想知道本身,這就是爲何我老是隨身攜帶這個: element
public static void ForEach<T>(this IEnumerable<T> col, Action<T> action) { if (action == null) { throw new ArgumentNullException("action"); } foreach (var item in col) { action(item); } }
不錯的小擴展方法。 it
在大多數狀況下,該語言中已包含一個foreach語句。 io
我不想看到如下內容: 編譯
list.ForEach( item => { item.DoSomething(); } );
代替: 擴展
foreach(Item item in list) { item.DoSomething(); }
在大多數狀況下 ,後者更清晰,更容易閱讀,但輸入可能要長一些。
可是,我必須認可我在這個問題上改變了立場; 在某些狀況下,ForEach()擴展方法確實頗有用。
如下是語句和方法之間的主要區別:
這些都是不少人在這裏提出的很好的觀點,我能夠看出爲何人們會錯過這個功能。 我不介意微軟在下一個框架迭代中添加標準的ForEach方法。
若是您有F#(將在.NET的下一個版本中),您可使用
Seq.iter doSomething myIEnumerable