为什么ForEach方法只在List集合上可用?
为什么ForEach方法只在List集合上可用?
这个问题已经有了答案:
可能有重复:
首先,我要明确我所指的是List
方法而不是C#关键字。那么微软为什么会在List
集合上提供Foreach方法,而在其他集合/可枚举类型上,特别是IEnumerable
上没有提供?
我只是几天前发现了这个方法,并且发现它在取代传统的foreach循环,只对每个对象执行一两行方法时非常好用。
看起来很容易创建一个执行相同功能的扩展方法。我想了解为什么微软作出了这个决定,根据这个决定我是否应该创建一个扩展方法。
admin 更改状态以发布 2023年5月23日
他的回答是,ForEach()
是一个你明确使用副作用的东西,而LINQ主要是为了定义序列上的投影和操作而被使用的无副作用API。
除了像并行循环这样的用途外,函数式的ForEach
语法在表达能力方面并没有太多的增加,而且由于委托调用,它比一个普通的foreach
循环稍微不那么有效率。
如果你确实想要一个IEnumerable
的ForEach
,那么编写一个并不困难:
public static class ForEachExtension { public static void ForEach( this IEnumerable seq, Action action ) { foreach( var item in seq ) action( item ); } // Here's a lazy, streaming version: public static IEnumerable ForEachLazy ( this IEnumerable seq, Action action ) { foreach( var item in seq ) { action( item ); yield return item; } } }