Listクラスでは、foreach文による列挙の他に、ForEachメソッドによる列挙が出来るようになっています。 このメソッドは、引数に列挙時に個々の要素に対して行う操作をデリゲートとして指定します。

ForEachメソッドによる列挙は、foreach文による列挙と結果は同じであるものの、breakに相当する操作ができない、列挙する要素の数だけデリゲート呼び出しが行われるといった不都合があるため、ほとんどの場合では強いてForEachメソッドを使って列挙しなければならない必要性はありません。

foreach文・ForEachメソッドを使ってList内の要素を列挙する(ラムダ式版) 
Imports System
Imports System.Collections.Generic

Class Sample
  Shared Sub Main()
    Dim list As New List(Of String)(New String() {"Alice", "Bob", "Charlie", "Dave", "Eve"})

    ' For Eachステートメントによる列挙
    Console.WriteLine("[For Each statement]")

    For Each e As String In list
      Console.WriteLine(e)
    Next

    ' ForEachメソッドによる列挙
    Console.WriteLine("[ForEach]")

    list.ForEach(Sub(e) Console.WriteLine(e))
  End Sub
End Class
実行結果
[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メソッドとコレクションの変更で詳しく解説しています。