IEnumerable に ForEach 拡張メソッドがないのはなぜですか? 質問する

IEnumerable に ForEach 拡張メソッドがないのはなぜですか? 質問する

欠落している機能について尋ねる別の質問に触発されてZip:

ForEachインターフェースに拡張メソッドがないのはなぜですかIEnumerable? またはどこにも? メソッドを取得する唯一のクラスForEachは ですList<>。 パフォーマンスなど、欠落している理由があるのでしょうか?

ベストアンサー1

foreachほとんどの場合、目的を果たすステートメントが言語にすでに組み込まれています。

次のようなことは見たくないです:

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

の代わりに:

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

後者は、入力に少し時間がかかるかもしれませんが、ほとんどの状況でより明確で読みやすいです。

しかし、私はその問題に関して自分の立場を変えたことを認めなければなりません。ForEach()拡張メソッドは確かにいくつかの状況では役に立つでしょう。

ステートメントとメソッドの主な違いは次のとおりです。

  • 型チェック: foreach は実行時に行われ、ForEach()コンパイル時に行われます (大きなプラス!)
  • デリゲートを呼び出す構文は実際にははるかに単純です: objects.ForEach(DoSomething);
  • ForEach() は連鎖することができますが、このような機能の悪性/有用性については議論の余地があります。

これらはすべて、ここで多くの人が指摘した素晴らしい点であり、人々がこの機能を見逃している理由もわかります。Microsoft が次のフレームワークの反復で標準の ForEach メソッドを追加しても構いません。

おすすめ記事