In Visual Basic gibt es die Schleifen For und For Each, von denen jede für bestimmte Aufgaben geeignet ist.
VB6 und klassisches Visual Basic unterstützten nur Schleifen über Bereiche (For ... Next). In späteren Versionen (beginnen mit VB6 und VB.NET) wurde For Each eingeführt, das es ermöglicht, Elemente von Sammlungen und Arrays elegant zu durchlaufen.
Das Hauptproblem ist die falsche Wahl des Schleifentyps und der Versuch, die Sammlung innerhalb von For Each zu ändern, was zu Laufzeitfehlern führt.
Verwenden Sie die normale For-Schleife, wenn:
Verwenden Sie For Each, wenn:
Beispielcode:
' Durchlaufen von Elementen mit Änderungen Dim arr() As Integer = {1, 2, 3} For i As Integer = 0 To arr.Length - 1 arr(i) = arr(i) * 2 Next ' Nur Lesen der Sammlung Dim list As New List(Of String) From {"one", "two", "three"} For Each s As String In list Console.WriteLine(s) Next
Wesentliche Merkmale:
Kann man eine Sammlung List(Of T) innerhalb von For Each ändern?
Nein. Dies führt zu einer InvalidOperationException, da die Struktur der Sammlung während der Iteration nicht geändert werden darf.
Wie verlässt man For Each rechtzeitig?
Verwenden Sie die Exit For-Anweisung, wenn das gesuchte Element gefunden wurde.
For Each s In list If s = "two" Then Exit For End If Next
Wie unterscheiden sich die Geschwindigkeiten von For und For Each bei Arrays?
In der Regel ist der Unterschied minimal, aber For kann etwas schneller sein (insbesondere bei Arrays primitiver Typen), da es direkt mit Indizes arbeitet, während For Each ein zusätzliches Enumerator-Objekt erstellt.
**Negativer Fall
Ein Entwickler versucht, Elemente aus List(Of T) innerhalb von For Each zu löschen. Er erhält zur Laufzeit einen Fehler vom Typ InvalidOperationException.
Vorteile:
Nachteile:
**Positiver Fall
Um Elemente zu löschen, wird mit der normalen For-Schleife von hinten durchlaufen:
For i = list.Count - 1 To 0 Step -1 If list(i) = "two" Then list.RemoveAt(i) End If Next
Vorteile:
Nachteile: