受到另外一个询问缺乏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