Listクラスでは、foreach文による列挙の他に、ForEachメソッドによる列挙が出来るようになっています。 このメソッドは、引数に列挙時に個々の要素に対して行う操作をデリゲートとして指定します。
ForEachメソッドによる列挙は、foreach文による列挙と結果は同じであるものの、breakに相当する操作ができない、列挙する要素の数だけデリゲート呼び出しが行われるといった不都合があるため、ほとんどの場合では強いてForEachメソッドを使って列挙しなければならない必要性はありません。
        foreach文・ForEachメソッドを使ってList内の要素を列挙する(ラムダ式版) C# 3.0
      using System;
using System.Collections.Generic;
class Sample {
  static void Main()
  {
    var list = new List<string>() {"Alice", "Bob", "Charlie", "Dave", "Eve"};
    // foreach文による列挙
    Console.WriteLine("[foreach]");
    foreach (var e in list) {
      Console.WriteLine(e);
    }
    // ForEachメソッドによる列挙
    Console.WriteLine("[ForEach]");
    list.ForEach(e => Console.WriteLine(e));
  }
}
実行結果
      [foreach] Alice Bob Charlie Dave Eve [ForEach] Alice Bob Charlie Dave Eve
foreach文で列挙している途中にRemoveメソッドやAddメソッドなどを呼び出してListクラスの内容を変更することは無効な操作であるため、例外InvalidOperationExceptionがスローされます。
ForEachメソッドを使った列挙の場合でも同様に無効な操作となりますが、.NET Framework 4.0以前ではInvalidOperationExceptionがスローされず、.NET Framework 4.5以降ではスローされるようになっています。 この点については列挙操作中のコレクションの変更 §.List.ForEachメソッドとコレクションの変更で詳しく解説しています。