Visual Basic .NET Language
Looping
Suche…
Fürs nächste
For
... Next
Loop wird verwendet, um dieselbe Aktion endlos oft zu wiederholen. Die Anweisungen innerhalb der folgenden Schleife werden 11-mal ausgeführt. Beim ersten Mal wird i
den Wert 0 haben, beim zweiten Mal wird es den Wert 1 haben, beim letzten Mal wird es den Wert 10 haben.
For i As Integer = 0 To 10
'Execute the action
Console.Writeline(i.ToString)
Next
Es kann ein ganzzahliger Ausdruck verwendet werden, um die Schleife zu parametrisieren. Es ist zulässig, aber nicht erforderlich, dass die Steuergröße (in diesem Fall i
) auch nach dem Next
. Es ist zulässig, dass die Steuervariable im Voraus und nicht innerhalb der For
Anweisung deklariert wird.
Dim StartIndex As Integer = 3
Dim EndIndex As Integer = 7
Dim i As Integer
For i = StartIndex To EndIndex - 1
'Execute the action
Console.Writeline(i.ToString)
Next i
Durch die Möglichkeit, die Start- und End-Ganzzahl zu definieren, können Schleifen erstellt werden, die direkt auf andere Objekte verweisen, z.
For i = 0 to DataGridView1.Rows.Count - 1
Console.Writeline(DataGridView1.Rows(i).Cells(0).Value.ToString)
Next
Dies würde dann jede Zeile in DataGridView1
und die Aktion ausführen, indem der Wert von Spalte 1 in die Konsole geschrieben wird. (Das -1 ist, weil die erste Zeile der gezählten Zeilen 1 wäre, nicht 0).
Es kann auch definiert werden, wie die Steuervariable erhöht werden muss.
For i As Integer = 1 To 10 Step 2
Console.Writeline(i.ToString)
Next
Dies gibt aus:
1 3 5 7 9
Es ist auch möglich, die Steuervariable zu dekrementieren (Countdown).
For i As Integer = 10 To 1 Step -1
Console.Writeline(i.ToString)
Next
Dies gibt aus:
10 9 8 7 6 5 4 3 2 1
Sie sollten nicht versuchen, die Steuervariable außerhalb der Schleife zu verwenden (zu lesen oder zu aktualisieren).
For Each ... Nächste Schleife zum Durchlaufen der Sammlung von Elementen
Sie können eine For Each...Next
Schleife verwenden, um einen beliebigen IEnumerable
Typ zu IEnumerable
. Dazu gehören Arrays, Listen und andere Elemente, die möglicherweise vom Typ IEnumerable sind oder ein IEnumerable zurückgeben.
Ein Beispiel für das Durchlaufen einer Rows-Eigenschaft einer DataTable würde folgendermaßen aussehen:
For Each row As DataRow In DataTable1.Rows
'Each time this loops, row will be the next item out of Rows
'Here we print the first column's value from the row variable.
Debug.Print(Row.Item(0))
Next
Wichtig ist, dass die Auflistung nicht in einer For Each
Schleife geändert werden darf. System.InvalidOperationException
wird eine System.InvalidOperationException
mit der Nachricht System.InvalidOperationException
:
Sammlung wurde geändert; Enumerationsoperation wird möglicherweise nicht ausgeführt.
Während der Schleife zum Durchlaufen, während eine Bedingung erfüllt ist
Eine While
Schleife beginnt mit der Auswertung einer Bedingung. Ist dies der Fall, wird der Hauptteil der Schleife ausgeführt. Nachdem der Body der Schleife ausgeführt wurde, wird die While
Bedingung erneut ausgewertet, um zu bestimmen, ob der Body erneut ausgeführt werden soll.
Dim iteration As Integer = 1
While iteration <= 10
Console.Writeline(iteration.ToString() & " ")
iteration += 1
End While
Dies gibt aus:
1 2 3 4 5 6 7 8 9 10
Warnung: Eine While
Schleife kann zu einer Endlosschleife führen . Berücksichtigen Sie, was passieren würde, wenn die Codezeile, die die iteration
erhöht, entfernt wird. In einem solchen Fall wäre die Bedingung niemals wahr und die Schleife würde unbegrenzt fortgesetzt.
Mach ... Schleife
Verwenden Sie Do...Loop
, um einen Anweisungsblock zu wiederholen, While
oder Until
eine Bedingung erfüllt ist. Überprüfen Sie die Bedingung entweder am Anfang oder am Ende der Schleife.
Dim x As Integer = 0
Do
Console.Write(x & " ")
x += 1
Loop While x < 10
oder
Dim x As Integer = 0
Do While x < 10
Console.Write(x & " ")
x += 1
Loop
0 1 2 3 4 5 6 7 8 9
Dim x As Integer = 0
Do
Console.Write(x & " ")
x += 1
Loop Until x = 10
oder
Dim x As Integer = 0
Do Until x = 10
Console.Write(x & " ")
x += 1
Loop
0 1 2 3 4 5 6 7 8 9
Continue Do
kann verwendet werden, um zur nächsten Iteration der Schleife zu springen:
Dim x As Integer = 0
Do While x < 10
x += 1
If x Mod 2 = 0 Then
Continue Do
End If
Console.Write(x & " ")
Loop
1 3 5 7 9
Sie können die Schleife mit Exit Do
beenden. Beachten Sie, dass das Fehlen einer Bedingung in diesem Beispiel eine Endlosschleife verursachen würde:
Dim x As Integer = 0
Do
Console.Write(x & " ")
x += 1
If x = 10 Then
Exit Do
End If
Loop
0 1 2 3 4 5 6 7 8 9
Kurzschluss
Jede Schleife kann jederzeit mit den Anweisungen Exit
oder Continue
beendet oder vorzeitig Continue
werden.
Beenden
Sie können jede Schleife stoppen, indem Sie sie vorzeitig beenden. Dazu können Sie das Schlüsselwort Exit
zusammen mit dem Namen der Schleife verwenden.
Schleife | Exit Statement |
---|---|
Zum | Exit For |
Für jeden | Exit For |
Während tun | Exit Do |
Während | Exit While |
Das frühe Beenden einer Schleife ist eine großartige Möglichkeit, die Leistung zu steigern, indem nur die erforderliche Anzahl Schleifen ausgeführt wird, um die Anforderungen der Anwendung zu erfüllen. Unten ist ein Beispiel, wo die Schleife beendet wird, sobald sie die Nummer 2
.
Dim Numbers As Integer() = {1,2,3,4,5}
Dim SoughtValue As Integer = 2
Dim SoughtIndex
For Each i In Numbers
If i = 2 Then
SoughtIndex = i
Exit For
End If
Next
Debug.Print(SoughtIndex)
Auch weiterhin
Neben dem vorzeitigen Beenden können Sie auch entscheiden, dass Sie einfach mit der nächsten Wiederholungsschleife fortfahren müssen. Dies erfolgt einfach mit der Continue
Anweisung. Genau wie Exit
wird mit dem Namen der Schleife fortgefahren.
Schleife | Setzen Sie die Anweisung fort |
---|---|
Zum | Continue For |
Für jeden | Continue For |
Während tun | Continue Do |
Während | Continue While |
Hier ein Beispiel, um zu verhindern, dass gerade Zahlen zur Summe hinzugefügt werden.
Dim Numbers As Integer() = {1,2,3,4,5}
Dim SumOdd As Integer = 0
For Each i In Numbers
If Numbers(i) \ 2 = 0 Then Continue For
SumOdd += Numbers(i)
Next
Verwendungshinweise
Es gibt zwei alternative Techniken, die anstelle von Exit
oder Continue
.
Sie können eine neue boolesche Variable deklarieren, sie auf einen Wert initialisieren und bedingt auf den anderen Wert in der Schleife setzen. Sie verwenden dann eine bedingte Anweisung (z. B. If
), die auf dieser Variablen basiert, um die Ausführung der Anweisungen in der Schleife in nachfolgenden Iterationen zu vermeiden.
Dim Found As Boolean = False
Dim FoundIndex As Integer
For i As Integer = 0 To N - 1
If Not Found AndAlso A(i) = SoughtValue Then
FoundIndex = i
Found = True
End If
Next
Einer der Einwände gegen diese Technik ist, dass sie möglicherweise ineffizient ist. Wenn zum Beispiel in dem obigen Beispiel N
1000000 ist und das erste Element des Arrays A
gleich SoughtValue
, wird die Schleife weitere 999999 Mal wiederholt, ohne irgendetwas Nützliches zu tun. Diese Technik kann jedoch in einigen Fällen den Vorteil größerer Klarheit haben.
Sie können die GoTo
Anweisung verwenden, um aus der Schleife zu springen. Beachten Sie, dass Sie GoTo
nicht verwenden können, um in eine Schleife zu springen.
Dim FoundIndex As Integer
For i As Integer = 0 To N - 1
If A(i) = SoughtValue Then
FoundIndex = i
GoTo Found
End If
Next
Debug.Print("Not found")
Found:
Debug.Print(FoundIndex)
Diese Technik kann manchmal die beste Methode sein, um aus der Schleife zu springen und eine oder mehrere Anweisungen zu vermeiden, die unmittelbar nach dem natürlichen Ende der Schleife ausgeführt werden.
Sie sollten alle Alternativen in Betracht ziehen und die für Ihre Anforderungen am besten geeignete Lösung verwenden, z. B. Effizienz, Schnelligkeit beim Schreiben des Codes und Lesbarkeit (also Wartbarkeit).
Lassen Sie sich mit GoTo
nicht GoTo
wenn dies die beste Alternative ist.
Verschachtelte Schleife
A nested loop is a loop within a loop, an inner loop within the body of an outer one. How this works is that the first pass of the outer loop triggers the inner loop, which executes to completion. Then the second pass of the outer loop triggers the inner loop again. This repeats until the outer loop finishes. a break within either the inner or outer loop would interrupt this process.
Die Struktur einer for next geschachtelten Schleife lautet:
For counter1=startNumber to endNumber (Step increment)
For counter2=startNumber to endNumber (Step increment)
One or more VB statements
Next counter2
Next counter1
Beispiel:
For firstCounter = 1 to 5
Print “First Loop of ” + firstCounter
For secondCounter= 1 to 4
Print “Second Loop of ” + secondCounter
Next secondCounter
Next firstCounter