为什么 IEnumerable 没有 ForEach 扩展方法?
为什么 IEnumerable 没有 ForEach 扩展方法?
受另一个问题的启发,该问题询问缺失的Zip
函数:
为什么IEnumerable
接口上没有ForEach
扩展方法?或者没有任何地方有它?唯一获取ForEach
方法的类是List<>
。是否有缺失的原因,也许是性能?
admin 更改状态以发布 2023年5月23日
语言内部已经包含了大多数情况下可以完成工作的foreach
语句。
我不希望看到以下情况:
list.ForEach( item => { item.DoSomething(); } );
而不是:
foreach(Item item in list) { item.DoSomething(); }
在大多数情况下,后者更清晰、更易于阅读,虽然可能打字更长一些。
然而,我必须承认,我在这个问题上改变了态度;在某些情况下,一个ForEach()
扩展方法确实是有用的。
以下是语句和方法之间的主要区别:
- 类型检查:foreach在运行时完成,
ForEach()
在编译时完成(大加分!) - 调用委托的语法确实简单得多:objects.ForEach(DoSomething);
- ForEach()可以链接:虽然这种功能的恶意/有用性有待讨论。
这些都是许多人在这里提出的很好的观点,我可以理解为什么人们会想念这个函数。我不介意微软在下一个框架迭代中添加一个标准的ForEach方法。