为什么 IEnumerable 上没有 ForEach 扩展方法?

问题描述

语言中已经foreach包含一个语句,大部分时间都可以完成这项工作。

我不想看到以下内容

list.ForEach( item =>
{
    item.DoSomething();
} );

代替:

foreach(Item item in list)
{
     item.DoSomething();
}

更清晰、更容易阅读,尽管打字时间可能会更长。

但是,我必须承认我在这个问题上改变了立场;在ForEach()某些情况下,扩展方法确实很有用。

以下是语句和方法间的主要区别:

  • 类型检查:foreach 在运行时完成,ForEach()在编译时完成(Big Plus!)
  • 调用委托的语法确实简单得多:objects.ForEach(DoSomething);
  • ForEach() 可以被链接起来:尽管这种功能的邪恶/有用性有待讨论。

这些都是这里很多人提出的重要观点,我可以理解为什么人们缺少这个功能。我不介意微软在下一次框架迭代中添加标准的 ForEach 方法

解决方法

受到另一个询问缺失Zip功能的问题的启发:

为什么界面上没有ForEach扩展方法?IEnumerable还是在任何地方?唯一获得ForEach方法的类是List<>.
是否有它丢失的原因,也许是性能?