For...Next-Anweisung (Visual Basic)For...Next Statement (Visual Basic)

Einer Gruppe von Anweisungen für eine angegebene Anzahl von Malen wiederholt wird.Repeats a group of statements a specified number of times.

SyntaxSyntax

For counter [ As datatype ] = start To end [ Step step ]  
    [ statements ]  
    [ Continue For ]  
    [ statements ]  
    [ Exit For ]  
    [ statements ]  
Next [ counter ]  

TeileParts

SegmentPart BeschreibungDescription
counter Erforderlich, der For Anweisung.Required in the For statement. Numerische Variable.Numeric variable. Die Steuerelementvariable für die Schleife.The control variable for the loop. Weitere Informationen finden Sie unter Leistungsindikator Argument weiter unten in diesem Thema.For more information, see Counter Argument later in this topic.
datatype Dies ist optional.Optional. Datentyp des counter.Data type of counter. Weitere Informationen finden Sie unter Leistungsindikator Argument weiter unten in diesem Thema.For more information, see Counter Argument later in this topic.
start Erforderlich.Required. Numerischer Ausdruck.Numeric expression. Der Anfangswert von counter.The initial value of counter.
end Erforderlich.Required. Numerischer Ausdruck.Numeric expression. Der endgültige Wert des counter.The final value of counter.
step Dies ist optional.Optional. Numerischer Ausdruck.Numeric expression. Der Betrag, counter wird jedes Mal beim Durchlaufen der Schleife erhöht.The amount by which counter is incremented each time through the loop.
statements Dies ist optional.Optional. Eine oder mehrere Anweisungen zwischen For und Next , auf denen die angegebene Anzahl von Malen ausgeführt.One or more statements between For and Next that run the specified number of times.
Continue For Dies ist optional.Optional. Überträgt die Steuerung an die nächste Schleifeniteration.Transfers control to the next loop iteration.
Exit For Dies ist optional.Optional. Überträgt die Steuerung von der For Schleife.Transfers control out of the For loop.
Next Erforderlich.Required. Beendet die Definition des der For Schleife.Terminates the definition of the For loop.

Hinweis

Die To -Schlüsselwort wird in dieser Anweisung verwendet, den Bereich für den Leistungsindikator an.The To keyword is used in this statement to specify the range for the counter. Sie können auch dieses Schlüsselwort in der auswählen... Case-Anweisung und Arraydeklarationen.You can also use this keyword in the Select...Case Statement and in array declarations. Weitere Informationen zu Arraydeklarationen, finden Sie unter Dim-Anweisung.For more information about array declarations, see Dim Statement.

Einfache BeispieleSimple Examples

Sie verwenden eine For... Next Struktur, wenn Sie einer Reihe von Anweisungen eine festgelegte Anzahl von Male wiederholen möchten.You use a For...Next structure when you want to repeat a set of statements a set number of times.

Im folgenden Beispiel die index Variable beginnt mit einem Wert von 1 und erhöht sich bei jeder Iteration der Schleife, beenden nach dem Wert des um index 5 erreicht.In the following example, the index variable starts with a value of 1 and is incremented with each iteration of the loop, ending after the value of index reaches 5.

For index As Integer = 1 To 5
    Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5

Im folgenden Beispiel die number Variablen beginnt bei 2 und endhost 0,25 bei jeder Iteration der Schleife, beenden, nachdem der Wert der number 0 erreicht.In the following example, the number variable starts at 2 and is reduced by 0.25 on each iteration of the loop, ending after the value of number reaches 0. Die Step Argument -.25 0,25 bei jeder Iteration der Schleife den Wert verringert.The Step argument of -.25 reduces the value by 0.25 on each iteration of the loop.

For number As Double = 2 To 0 Step -0.25
    Debug.Write(number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0 

Tipp

Ein während... While-Anweisung enden oder werden... Loop-Anweisung funktioniert gut, wenn Sie im Voraus wissen nicht wie oft die Anweisungen in der Schleife ausgeführt.A While...End While Statement or Do...Loop Statement works well when you don't know in advance how many times to run the statements in the loop. Jedoch wenn Sie erwarten, dass der Schleife eine bestimmte Anzahl von Malen, Ausführen einer For... Next Schleife ist die bessere Wahl.However, when you expect to run the loop a specific number of times, a For...Next loop is a better choice. Bestimmen Sie die Anzahl der Iterationen, bei der Eingabe der schleifenstatus.You determine the number of iterations when you first enter the loop.

Schachteln von SchleifenNesting Loops

Sie können schachteln For Schleifen, indem Sie eine Schleife in eine andere einfügen.You can nest For loops by putting one loop within another. Im folgende Beispiel wird veranschaulicht, geschachtelte For... Next Strukturen, die über unterschiedliche Werte verfügen.The following example demonstrates nested For...Next structures that have different step values. Die äußere Schleife erstellt eine Zeichenfolge für jede Iteration der Schleife.The outer loop creates a string for every iteration of the loop. Die innere Schleife verringert eine Zählervariable für jede Iteration der Schleife an.The inner loop decrements a loop counter variable for every iteration of the loop.

For indexA = 1 To 3
    ' Create a new StringBuilder, which is used
    ' to efficiently build strings.
    Dim sb As New System.Text.StringBuilder()

    ' Append to the StringBuilder every third number
    ' from 20 to 1 descending.
    For indexB = 20 To 1 Step -3
        sb.Append(indexB.ToString)
        sb.Append(" ")
    Next indexB

    ' Display the line.
    Debug.WriteLine(sb.ToString)
Next indexA
' Output:
'  20 17 14 11 8 5 2
'  20 17 14 11 8 5 2
'  20 17 14 11 8 5 2

Wenn Schleifen geschachtelt werden, muss jede Schleife einen eindeutigen haben counter Variable.When nesting loops, each loop must have a unique counter variable.

Sie können auch verschiedene Arten von Steuerungsstrukturen ineinander schachteln.You can also nest different kinds control structures within each other. Weitere Informationen finden Sie unter geschachtelten Steuerungsstrukturen.For more information, see Nested Control Structures.

Für beenden und fortsetzenExit For and Continue For

Die Exit For Anweisung sofort unterbricht die For...NextThe Exit For statement immediately exits the ForNext Schleife und überträgt die Steuerung an die Anweisung mit der Next Anweisung.loop and transfers control to the statement that follows the Next statement.

Die Continue For Anweisung überträgt die Steuerung sofort an die nächste Iteration der Schleife.The Continue For statement transfers control immediately to the next iteration of the loop. Weitere Informationen finden Sie unter Continue-Anweisung.For more information, see Continue Statement.

Das folgende Beispiel veranschaulicht die Verwendung der Continue For und Exit For Anweisungen.The following example illustrates the use of the Continue For and Exit For statements.

For index As Integer = 1 To 100000
    ' If index is between 5 and 7, continue
    ' with the next iteration.
    If index >= 5 And index <= 8 Then
        Continue For
    End If

    ' Display the index.
    Debug.Write(index.ToString & " ")

    ' If index is 10, exit the loop.
    If index = 10 Then
        Exit For
    End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10

Sie können eine beliebige Anzahl von einfügen Exit For Anweisungen in einem For...NextYou can put any number of Exit For statements in a ForNext Schleife.loop. Bei Verwendung in geschachtelten For...NextWhen used within nested ForNext Schleifen, Exit For verlässt die innerste Schleife und überträgt die Steuerung an der nächsthöheren Ebene der Schachtelung.loops, Exit For exits the innermost loop and transfers control to the next higher level of nesting.

Exit Forwird häufig verwendet werden, nachdem Sie eine Bedingung ausgewertet (z. B. in einer If... Then... Else Struktur).Exit For is often used after you evaluate some condition (for example, in an If...Then...Else structure). Möglicherweise möchten Sie verwenden Exit For für die folgenden Bedingungen:You might want to use Exit For for the following conditions:

  • Durchlaufen Sie den Vorgang fortsetzen, ist nicht erforderlich oder unmöglich.Continuing to iterate is unnecessary or impossible. Diese Bedingung möglicherweise erstellen Sie einen falschen Wert oder eine Anforderung zum Beenden.An erroneous value or a termination request might create this condition.

  • Ein Try... Catch... Finally Anweisung wird eine Ausnahme abgefangen.A Try...Catch...Finally statement catches an exception. Sie können Exit For am Ende der Finally Block.You might use Exit For at the end of the Finally block.

  • Sie haben eine Endlosschleife, also eine Schleife, die eine große oder sogar unendliche Anzahl von Malen ausgeführt werden konnte.You have an endless loop, which is a loop that could run a large or even infinite number of times. Wenn Sie diese Situation erkennen, können Sie Exit For um die Schleife zu verlassen.If you detect such a condition, you can use Exit For to escape the loop. Weitere Informationen finden Sie unter werden... Loop-Anweisung.For more information, see Do...Loop Statement.

Technische ImplementierungTechnical Implementation

Wenn eine For... Next Schleife gestartet wird, wertet Visual Basic start, end, und step.When a For...Next loop starts, Visual Basic evaluates start, end, and step. Visual Basic wertet diese Werte nur zu dieser Zeit ein, und weist start auf counter.Visual Basic evaluates these values only at this time and then assigns start to counter. Vor der Anweisung Block ausgeführt wird, stellt das Visual Basic counter auf end.Before the statement block runs, Visual Basic compares counter to end. Wenn counter bereits ist größer als die end Wert (oder kleiner, wenn step ist ein negativer Wert), wird die For -Schleife beendet und die Steuerung an die Anweisung mit übergeben der Next Anweisung.If counter is already larger than the end value (or smaller if step is negative), the For loop ends and control passes to the statement that follows the Next statement. Andernfalls wird der Anweisungsblock ausgeführt.Otherwise, the statement block runs.

Jedes Mal, wenn Visual Basic stößt der Next -Anweisung, es erhöht counter von step und gibt Sie zurück zu der For Anweisung.Each time Visual Basic encounters the Next statement, it increments counter by step and returns to the For statement. Erneut vergleicht counter auf end, und es werden abhängig vom Ergebnis die Schleife beendet oder der Block ausgeführt.Again it compares counter to end, and again it either runs the block or exits the loop, depending on the result. Dieser Prozess wird fortgesetzt, bis counter übergibt end oder eine Exit For Anweisung gefunden wird.This process continues until counter passes end or an Exit For statement is encountered.

Beenden der Schleife nicht bis counter vergangen end.The loop doesn't stop until counter has passed end. Wenn counter gleich end, die Schleife fortgesetzt wird.If counter is equal to end, the loop continues. Der Vergleich, der bestimmt, ob der Block ausgeführt wird counter <= end Wenn step positiv und counter >= end Wenn step ist ein negativer Wert.The comparison that determines whether to run the block is counter <= end if step is positive and counter >= end if step is negative.

Wenn Sie den Wert ändern counter innerhalb einer Schleife Code möglicherweise schwieriger zu lesen und zu debuggen.If you change the value of counter while inside a loop, your code might be more difficult to read and debug. Ändern des Werts der start, end, oder step keinen Einfluss auf die Iterationswerte, die ermittelt wurden, wenn die Schleife zuerst eingegeben wurde.Changing the value of start, end, or step doesn't affect the iteration values that were determined when the loop was first entered.

Wenn Sie Schleifen schachteln, signalisiert der Compiler einem Fehler, wenn er erkennt die Next Anweisung einer äußeren Schachtelungsebene vor der Next Anweisung einer inneren Ebene.If you nest loops, the compiler signals an error if it encounters the Next statement of an outer nesting level before the Next statement of an inner level. Jedoch der Compiler erkennen diese überlappende Fehler bei der Angabe counter in jedem Next Anweisung.However, the compiler can detect this overlapping error only if you specify counter in every Next statement.

Schritt-ArgumentStep Argument

Der Wert des step kann positiv oder negativ sein.The value of step can be either positive or negative. Dieser Parameter bestimmt Verarbeitung entsprechend der folgenden Tabelle:This parameter determines loop processing according to the following table:

Step-WertStep value Schleife wird ausgeführt, wennLoop executes if
Positiv oder 0 (null)Positive or zero counter <= end
NegativNegative counter >= end

Der Standardwert von step ist 1.The default value of step is 1.

Leistungsindikator-ArgumentCounter Argument

Die folgende Tabelle gibt an, ob counter definiert eine neue lokale Variable, die als Bereich ist für das gesamte For…Next Schleife.The following table indicates whether counter defines a new local variable that’s scoped to the entire For…Next loop. Diese Entscheidung hängt davon ab, ob datatype vorhanden ist und ob counter ist bereits definiert.This determination depends on whether datatype is present and whether counter is already defined.

Ist datatype vorhanden?Is datatype present? Ist counter bereits definiert?Is counter already defined? Ergebnis (ob counter definiert eine neue lokale Variable, die als Bereich ist für das gesamte For...Next Schleife)Result (whether counter defines a new local variable that’s scoped to the entire For...Next loop)
NeinNo JaYes Nein, da counter ist bereits definiert.No, because counter is already defined. Wenn den Bereich der counter befindet sich nicht lokal auf die Prozedur eine Warnung während der Kompilierung auftritt.If the scope of counter isn't local to the procedure, a compile-time warning occurs.
NeinNo NeinNo Ja.Yes. Der Datentyp abgeleitet wird, aus der start, end, und step Ausdrücke.The data type is inferred from the start, end, and step expressions. Informationen über den Typrückschluss finden Sie unter Option Infer-Anweisung und lokalen Typrückschluss.For information about type inference, see Option Infer Statement and Local Type Inference.
JaYes JaYes Ja, aber nur, wenn die vorhandene counter Variable außerhalb der Prozedur definiert wird.Yes, but only if the existing counter variable is defined outside the procedure. Diese Variable bleibt getrennt.That variable remains separate. Wenn der Bereich des vorhandenen counter Variable ist die Prozedur tritt ein Kompilierzeitfehler auf.If the scope of the existing counter variable is local to the procedure, a compile-time error occurs.
JaYes NeinNo Ja.Yes.

Der Datentyp des counter bestimmt den Typ der Iteration, der einen der folgenden Typen sein muss:The data type of counter determines the type of the iteration, which must be one of the following types:

  • Ein Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single, oder Double.A Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single, or Double.

  • Eine Enumeration, die Sie mithilfe von Deklarieren einer Enum-Anweisung.An enumeration that you declare by using an Enum Statement.

  • Eine Object.An Object.

  • Ein Typ T , besitzt die folgenden Operatoren, in denen B ist ein Typ, der in verwendet werden kann ein Boolean Ausdruck.A type T that has the following operators, where B is a type that can be used in a Boolean expression.

    Public Shared Operator >= (op1 As T, op2 As T) As B

    Public Shared Operator <= (op1 As T, op2 As T) As B

    Public Shared Operator - (op1 As T, op2 As T) As T

    Public Shared Operator + (op1 As T, op2 As T) As T

Sie können optional angeben, die counter -Variable in der Next Anweisung.You can optionally specify the counter variable in the Next statement. Diese Syntax verbessert die Lesbarkeit des Programms, insbesondere bei geschachtelten For Schleifen.This syntax improves the readability of your program, especially if you have nested For loops. Geben Sie die Variable, die angezeigt wird in der entsprechenden For Anweisung.You must specify the variable that appears in the corresponding For statement.

Die start, end, und step Auswerten von Ausdrücken können auf einen beliebigen Datentyp aufweisen, die in den Typ des erweitert counter.The start, end, and step expressions can evaluate to any data type that widens to the type of counter. Wenn Sie einen benutzerdefinierten Typ für verwenden counter, möglicherweise müssen Sie definieren die CType Konvertierungsoperator konvertieren Sie die Typen von start, end, oder step in den Typ des counter.If you use a user-defined type for counter, you might have to define the CType conversion operator to convert the types of start, end, or step to the type of counter.

BeispielExample

Im folgende Beispiel entfernt alle Elemente aus einer generischen Liste.The following example removes all elements from a generic list. Statt eine für jede... Nächste Anweisung, das Beispiel zeigt eine For... Next -Anweisung, die Elemente in absteigender Reihenfolge durchläuft.Instead of a For Each...Next Statement, the example shows a For...Next statement that iterates in descending order. Im Beispiel wird diese Technik verwendet, da die removeAt Methode bewirkt, dass Elemente nach dem entfernten Element einen niedrigeren Indexwert haben.The example uses this technique because the removeAt method causes elements after the removed element to have a lower index value.

Dim lst As New List(Of Integer) From {10, 20, 30, 40}

For index As Integer = lst.Count - 1 To 0 Step -1
    lst.RemoveAt(index)
Next

Debug.WriteLine(lst.Count.ToString)
' Output: 0

BeispielExample

Das folgende Beispiel durchläuft eine Enumeration, die deklariert wird ein Enum-Anweisung.The following example iterates through an enumeration that's declared by using an Enum Statement.

Public Enum Mammals
    Buffalo
    Gazelle
    Mongoose
    Rhinoceros
    Whale
End Enum


Public Sub ListSomeMammals()
    For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinoceros
        Debug.Write(mammal.ToString & " ")
    Next
    Debug.WriteLine("")
    ' Output: Gazelle Mongoose Rhinoceros
End Sub

BeispielExample

Im folgenden Beispiel verwenden Sie die Anweisungsparameter eine Klasse mit operatorüberladungen für die +, -, >=, und <= Operatoren.In the following example, the statement parameters use a class that has operator overloads for the +, -, >=, and <= operators.

Private Class Distance
    Public Property Number() As Double

    Public Sub New(ByVal number As Double)
        Me.Number = number
    End Sub

    ' Define operator overloads to support For...Next statements.
    Public Shared Operator +(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
        Return New Distance(op1.Number + op2.Number)
    End Operator

    Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
        Return New Distance(op1.Number - op2.Number)
    End Operator

    Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
        Return (op1.Number >= op2.Number)
    End Operator

    Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
        Return (op1.Number <= op2.Number)
    End Operator
End Class


Public Sub ListDistances()
    Dim distFrom As New Distance(10)
    Dim distTo As New Distance(25)
    Dim distStep As New Distance(4)

    For dist As Distance = distFrom To distTo Step distStep
        Debug.Write(dist.Number.ToString & " ")
    Next
    Debug.WriteLine("")

    ' Output: 10 14 18 22 
End Sub

Siehe auchSee Also

List<T>
SchleifenstrukturLoop Structures
While...End While-AnweisungWhile...End While Statement
Do...Loop-AnweisungDo...Loop Statement
Geschachtelte SteuerungsstrukturenNested Control Structures
Exit-AnweisungExit Statement
SammlungenCollections