Hintergrund
Die For...Next-Schleife existiert in Visual Basic seit den ersten Versionen und ermöglicht das Durchlaufen eines Wertebereichs, häufig verwendet für die Arbeit mit Arrays und Sammlungen. In VB.NET wurde ein semantisch strengerer Zähler und die Unterstützung für den Schritt (Step) hinzugefügt.
Problem
Ein klassischer Fehler ist die Änderung des Wertes des Schleifenzählers (z.B. i), was zu unerwartetem Verhalten führt: Der Zähler wird am Ende jeder Iteration automatisch inkrementiert/dekrementiert. Es ist auch wichtig, die Grenzen für die Iteration über Sammlungen korrekt festzulegen (z.B. For i = 0 To arr.Length - 1).
Lösung
Verwenden Sie immer unveränderliche Zähler oder speichern Sie den Ausdruck für die obere Grenze sofort in einer Variablen, wenn sich die Sammlung innerhalb der Schleife ändern kann. Ändern Sie den Zähler nicht explizit im Schleifeninhalt.
Beispielcode:
Dim arr() As Integer = {1, 2, 3, 4} For i As Integer = 0 To arr.Length - 1 Console.WriteLine(arr(i)) Next
Wichtige Merkmale:
Was passiert, wenn der Zähler im Schleifeninhalt manuell geändert wird?
Der Wert ändert sich nur innerhalb der aktuellen Iteration, aber am Ende der Iteration führt Visual Basic automatisch die Inkrementierung/Dekrementierung durch, was zu einer unvorhersehbaren Anzahl von Durchläufen führen kann.
For i = 1 To 5 If i = 3 Then i = 1 Console.WriteLine(i) Next
Kann For...Next für die Iteration über Sammlungen, wie List(Of T), verwendet werden?
Ja, es ist jedoch vorzuziehen, For Each für Sammlungen zu verwenden, um Fehler mit sich ändernden Größen zu vermeiden. For...Next speichert nur die Indizes.
Was passiert, wenn die obere Grenze kleiner als die untere bei positivem Schritt ist?
Die Schleife wird kein einziges Mal ausgeführt.
For i = 5 To 1 ' ohne Step - die Schleife wird nicht ausgeführt ... Next
Der Zähler wurde manuell geändert, wenn ein bestimmtes Element gefunden wurde, der Versuch, zukünftige Elemente zu überspringen, führte zum Überspringen einiger Iterationen und einer endlosen Schleife.
Vorteile:
Nachteile:
Verwendung einer separaten Variablen zur Kontrolle der Bedingungen, keine Eingriffe in den Schleifenzähler.
Vorteile:
Nachteile: