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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow