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í.
Argument 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.
Čí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)
Koncepty
Vnořené struktury řízení (Visual Basic)