1. ホーム
  2. c#

[解決済み] IEnumerableにForEach拡張メソッドがないのはなぜですか?

2022-02-05 22:42:04

質問

他の質問からヒントを得て Zip 関数を使用します。

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

解決方法は?

すでに foreach 文は、ほとんどの場合、その仕事をする言語に含まれています。

以下は見たくないですね。

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

の代わりに

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

後者はより明確で読みやすい ほとんどの場合 しかし、タイプするのに少し時間がかかるかもしれません。

しかし、私はこの問題に対するスタンスを変えたことを認めざるを得ません。 ForEach() の拡張メソッドは、確かに便利な場面もありますね。

以下、ステートメントとメソッドの大きな違いについて説明します。

  • 型チェック:foreachは実行時に行われる。 ForEach() はコンパイル時 (大きなプラス!)
  • デリゲートを呼び出す構文は、確かにずっとシンプルです:objects.ForEach(DoSomething);
  • ForEach()は連鎖させることができる:ただし、そのような機能の悪さと有用性は議論の余地がある。

これらはすべて、ここで多くの人が指摘している素晴らしい点であり、なぜ人々がこの機能を見逃しているのかがわかります。私は、Microsoftが次のフレームワークのイテレーションで標準的なForEachメソッドを追加することに抵抗はないでしょう。