Sdílet prostřednictvím


Pro...Další příkaz (Visual Basic)

Skupiny příkazů se opakuje podle zadaného počtu opakování.

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

Části

Část

Description

counter

Vyžaduje For prohlášení.Číselné proměnné.Řídicí proměnná smyčky.Další informace naleznete v části Čítač Argument uvedeném dále v tomto tématu.

datatype

Nepovinné.Datový typ counter.Další informace naleznete v části Čítač Argument uvedeném dále v tomto tématu.

start

Povinné.Číselný výraz.Počáteční hodnota counter.

end

Povinné.Číselný výraz.Výsledná hodnota counter.

step

Nepovinné.Číselný výraz.Hodnota, o kterou counter je zvýšen při každém průchodu smyčkou.

statements

Nepovinné.Jeden nebo více příkazů mezi For a Next , spustit zadaným počtem opakování.

Continue For

Nepovinné.Předává řízení na další opakování smyčky.

Exit For

Nepovinné.Převede ovládací prvek z For smyčky.

Next

Povinné.Ukončí definici For smyčky.

[!POZNÁMKA]

To k určení rozsahu čítače v tomto výrazu použít klíčové slovo.Můžete také použít klíčové slovo this Vyberte...Příkaz Case (Visual Basic) a deklarace polí.Další informace o deklarace polí naleznete v tématu Dim prohlášení (Visual Basic).

Jednoduché příklady

You use a For...Next struktury pro určený sadu příkazů nastavit počet opakování.

V následujícím příkladu index proměnné začíná hodnotou 1 a je zvýšen při každé iteraci smyčky, končí po hodnotu index dosáhne 5.

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

V následujícím příkladu number proměnné začíná 2 a je snížena o 0,25 při každém opakování smyčky, končí po hodnotu number dosáhne hodnoty 0.Step Argumentu -.25 snižuje hodnotu 0,25 při každém opakování smyčky.

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 

Tip

A Při...Ukončit při výpisu (Visual Basic) nebo Proveďte...Příkaz LOOP (Visual Basic) funguje dobře, pokud si nejste jisti předem kolikrát chcete-li spustit příkazy ve smyčce.Pokud očekáváte však spuštění smyčky konkrétní počet opakování, For...Next smyčka je lepší volbou.Při prvním zadání smyčky, určete počet iterací.

Vnořené smyčky

Můžete vnořovat For smyčky vložením jedné smyčky v rámci jiného.Následující příklad ukazuje vnořený For...Next struktury, které mají hodnoty různých krok.Vnější smyčka vytvoří řetězec pro každé opakování smyčky.Vnitřní smyčka snížení hodnoty proměnné čítače smyčky pro každé opakování smyčky.

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

Při vnoření smyčky, každé smyčce musí mít jedinečné counter proměnné.

Můžete také vnořit struktury řízení různých druhů do sebe.Další informace naleznete v tématu Vnořené struktury řízení (Visual Basic).

Pro ukončení a pokračovat

Exit For Prohlášení okamžitě ukončí For...Next smyčky a kdy řízení příkazu, který následuje Next prohlášení.

Continue For Příkaz předá řízení bezprostředně následující iteraci smyčky.Další informace naleznete v tématu Pokračovat v prohlášení (Visual Basic).

Následující příklad ukazuje použití Continue For a Exit For příkazy.

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

Můžete umístit libovolný počet Exit For prohlášení v For...Next loop.Při použití v rámci vnořené For...Next smyčky, Exit For ukončí vnitřní smyčka a převede ovládací prvek na nejbližší vyšší úrovně vnoření.

Exit Forje často používán po vyhodnocení některé podmínky (například v If...Then...Else struktury).Můžete chtít použít Exit For pro následující podmínky:

  • Pokračováním iterace je zbytečné nebo nemožné.Tato podmínka může vytvořit zadání chybné hodnoty nebo požadavek na ukončení.

  • A Try...Catch...Finally příkaz zachytí výjimku.Můžete použít Exit For na konci Finally bloku.

  • Máte nekonečné smyčce, což je smyčky, která by mohla spustit velký nebo dokonce nekonečné udává, kolikrát.Pokud odhalíte takové podmínky můžete použít Exit For k návratu smyčky.Další informace naleznete v tématu Proveďte...Příkaz LOOP (Visual Basic).

Technická implementace

When a For...Next spuštění cyklu, je vyhodnocen jako Visual Basic start, end, a step.Visual Basic vyhodnocuje pouze na tento čas a potom přiřadí tyto hodnoty start na counter.Před příkaz blokovat spuštění porovná Visual Basic counter na end.Pokud counter je větší než end hodnotu (nebo menší, pokud step je negativní), For smyčky skončí a řízení průchodů na příkaz, který následuje Next prohlášení.Jinak se spustí příkaz blokovat.

Pokaždé, když dostal jazyka Visual Basic Next prohlášení, zvýší counter ve step a vrátí se For prohlášení.Znovu porovnává counter na end, a znovu ho bloku se spustí nebo ukončí smyčku, v závislosti na výsledku.Tento proces pokračuje, dokud counter předává end nebo Exit For zjistil prohlášení.

Smyčka nezastaví až do counter byl předán end.Pokud counter se rovná end, cyklus pokračuje.Porovnání, která určuje, zda spuštění bloku je counter < = end -li step je pozitivní a counter > = end -li step je negativní.

Pokud změníte hodnotu counter při uvnitř smyčky, váš kód může být obtížnější pro čtení a ladění.Změna hodnoty start, end, nebo step nemá žádný vliv na hodnoty iterace, které byly určeny při prvním zadání smyčky.

Je-li vnořit smyčky, kompilátor signalizuje chybu Pokud se setká Next příkazu vnější úroveň vnoření před Next prohlášení o vnitřní úroveň.Však kompilátor může zjistit to překrývající se chyba pouze v případě, že zadáte counter v každé Next prohlášení.

5z06z1kb.collapse_all(cs-cz,VS.110).gifArgument krok

Hodnota step může být pozitivní nebo negativní.Tento parametr určuje smyčku zpracování podle následující tabulky:

Hodnotou kroku

Provede smyčku, pokud

Pozitivní nebo nula.

counter< =end

Negativní

counter> =end

Výchozí hodnota step je 1.

5z06z1kb.collapse_all(cs-cz,VS.110).gifČítač Argument

Následující tabulka udává, zda counter definuje nové místní proměnné, který je zaměřen na celou For…Next smyčky.Toto rozhodnutí závisí na tom, zda datatype je k dispozici a zda counter je již definován.

Je datatype současné?

Je counter již definován?

Výsledek (zda counter definuje nové místní proměnné, který je zaměřen na celou For...Next smyčky)

Ne

Ano

Ne, protože counter je již definován.Pokud rozsah counter není místní, postupu, dojde k upozornění v době kompilace.

Ne

Ne

Ano.Datový typ je odvozen z start, end, a step výrazy.Chcete-li zobrazit informace o odvození typu proměnné, viz Možnost odvodit prohlášení a Místní odvození typu (Visual Basic).

Ano

Ano

Ano, ale pouze tehdy, pokud stávající counter proměnná je definována mimo danou proceduru.Tato proměnná zůstane samostatné.Pokud stávající rozsah counter proměnné je místní řízení, dojde k chybě kompilace.

Ano

Ne

Ano.

Datový typ counter Určuje typ iterace, která musí být jeden z následujících typů:

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

  • Výčet, který deklarujete pomocí technologie Příkaz enum (Visual Basic).

  • An Object.

  • Typ T , který má následující operátory, kde B je typ, který lze použít v Boolean výrazu.

    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

Nepovinně lze uvést counter v proměnné Next prohlášení.Tato syntaxe zlepšuje čitelnost programu, zejména v případě, že můžete vnořovat For smyčky.Je nutné zadat proměnnou, která se zobrazí v odpovídajících For prohlášení.

start, end, A step výrazy mohou vyhodnotit na datový typ, který rozšiřuje typ counter.Pokud použijete uživatelem definovaný typ pro counter, bude pravděpodobně nutné definovat CType operátor převodu k převodu typů start, end, nebo step druhu counter.

Příklad

Následující příklad odebere všechny prvky z obecný seznam.Místo Pro každý...Další příkaz (Visual Basic), příklad ukazuje For...Next prohlášení, která iteruje v sestupném pořadí.Příklad používá tuto techniku, protože removeAt metoda způsobí, že prvky po odebraný prvek, který chcete mít nižší hodnotu indexu.

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

Tento příklad prochází výčet, který je deklarován pomocí technologie Příkaz enum (Visual Basic).

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

V následujícím příkladu parametry příkazu použít třídu, která má operátor přetížení +, -, >=, a <= operátory.

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

Viz také

Referenční dokumentace

Při...Ukončit při výpisu (Visual Basic)

Proveďte...Příkaz LOOP (Visual Basic)

Ukončení příkazu (Visual Basic)

List<T>

Koncepty

Struktury (Visual Basic)

Vnořené struktury řízení (Visual Basic)

Další zdroje

Kolekce (C# a Visual Basic)