Udostępnij za pośrednictwem


For...Next — Instrukcja (Visual Basic)

Powtarza grupę poleceń określoną liczbę razy.

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

Części

Część

Opis

counter

Wymagane w For instrukcji.Zmienna numeryczna.Zmienna kontrolna pętli for.Aby uzyskać więcej informacji, zobacz Argument licznika w dalszej części tego tematu.

datatype

Opcjonalne.Typ danych z counter.Aby uzyskać więcej informacji, zobacz Argument licznika w dalszej części tego tematu.

start

Wymagane.Wyrażenie liczbowe.Początkowa wartość pola counter.

end

Wymagane.Wyrażenie liczbowe.Wartość końcową counter.

step

Opcjonalne.Wyrażenie liczbowe.Wartość, o którą counter jest zwiększany o jeden przy każdym przejściu pętli.

statements

Opcjonalne.Jeden lub więcej instrukcji między For i Next , które uruchomić określoną liczbę razy.

Continue For

Opcjonalne.Przekaże kontrolę następnej iteracji pętli.

Exit For

Opcjonalne.Przekazuje sterowanie z For pętli.

Next

Wymagane.Kończy definicję For pętli.

[!UWAGA]

To Słowa kluczowego w tej instrukcji jest używany do określania zakresu dla licznika.Można również użyć tego słowa kluczowego w Select...Case — Instrukcja (Visual Basic) i w deklaracji tablicy.Aby uzyskać więcej informacji na temat deklaracje tablic, zobacz Dim — Instrukcja (Visual Basic).

Proste przykłady

You use a For...Next struktury, kiedy mają być powtarzane zestaw instrukcje okreoloną liczbę razy.

W poniższym przykładzie index zmiennej rozpoczyna się od wartości 1 i jest zwiększana przy każdej iteracji pętli, kończące się po wartość index osiągnie 5.

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

W poniższym przykładzie number zmiennej zaczyna się 2 i zmniejsza się o 0,25 w każdej iteracji pętli, kończące się po wartość number będzie wynosić 0.Step Argumentu -.25 powoduje zmniejszenie wartości o 0,25 w każdej iteracji pętli.

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 
PoradaPorada

A While...End While — Instrukcja (Visual Basic) lub Do...Loop — Instrukcja (Visual Basic) działa dobrze, jeśli nie wiesz z wyprzedzeniem ile razy, aby uruchomić instrukcji w pętli.Jednak przypadku oczekiwania na uruchomienie pętli określoną liczbę razy, For...Next pętla jest lepszym rozwiązaniem.Aby określić liczbę iteracji, należy przy pierwszym pętli.

Zagnieżdżanie pętli

Można zagnieździć For pętli poprzez umieszczenie jednej pętli w innym.W poniższym przykładzie zademonstrowano zagnieżdżonych For...Next struktur, które mają wartości różnych krok.Zewnętrzna pętla tworzy ciąg dla każdej iteracji pętli.Wewnętrzna pętla zmniejsza zmienną licznika pętli dla każdej iteracji pętli.

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

Gdy zagnieżdżanie pętli, każdej pętli musi mieć wyjątkowy counter zmiennej.

Można także zagnieżdżać różne rodzaje struktur sterujących w sobie zagnieżdżone.Aby uzyskać więcej informacji, zobacz Zagnieżdżone struktury sterujące (Visual Basic).

Exit dla i kontynuuj przez

Exit For Instrukcja natychmiast zamyka For...Next pętli i transfery sterowania do instrukcji następującej Next instrukcji.

Continue For Instrukcji przekazuje sterowanie od razu do następnej iteracji pętli.Aby uzyskać więcej informacji, zobacz Continue — Instrukcja (Visual Basic).

Poniższy przykład ilustruje użycie Continue For i Exit For instrukcji.

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

Można umieścić dowolną liczbę Exit For instrukcji w For...Next loop.Użyto zagnieżdżone wewnątrz For...Next pętli, Exit For kończy działanie pętli znajdujące się najniżej i przekazuje sterowanie do następnego wyższego poziomu zagnieżdżenia.

Exit Forczęsto jest używany po ocenić niektóre stan (na przykład w If...Then...Else struktury).Być może chcesz użyć Exit For w następujących warunkach:

  • Chwili jest niemożliwe lub niepotrzebne.Błędna wartość lub żądanie przerwania może utworzyć ten warunek.

  • A Try...Catch...Finally instrukcji wyjątek zostanie przechwycony.Można użyć Exit For na koniec Finally bloku.

  • Masz nieskończonej pętli, czyli pętlę, która może uruchomić dużych lub nawet nieskończoną liczbę razy.Jeśli wykryje taki warunek, można użyć Exit For Aby uniknąć pętli.Aby uzyskać więcej informacji, zobacz Do...Loop — Instrukcja (Visual Basic).

Techniczna realizacja

When a For...Next rozpoczyna pętlę, Visual Basic ocenia start, end, i step.Visual Basic ocenia te wartości tylko w tym czasie, a następnie przypisuje start do counter.Przed instrukcją bloku działa, porównuje języka Visual Basic counter do end.Jeśli counter już jest większy niż end wartość (lub, jeśli mniejszy step jest liczbą ujemną), For kończy się w pętli i kontrola przechodzi do instrukcji następującej Next instrukcji.W przeciwnym razie jest uruchamiany bloku instrukcji.

Za każdym razem spotkania języka Visual Basic Next instrukcji, powiększa on counter przez step i powraca do For instrukcji.Ponownie porównuje counter do end, i ponownie go uruchamia bloku lub kończy działanie pętli, w zależności od wyniku.Ten proces jest kontynuowany aż do counter przechodzi end lub Exit For napotkania instrukcji.

Pętla nie kończy się aż do counter przeszło end.Jeśli counter jest równa end, Pętla kontynuuje.Porównanie, która określa, czy do uruchomienia tego bloku jest counter < = end Jeśli step jest pozytywny i counter > = end Jeśli step jest liczbą ujemną.

Jeżeli zmienisz wartość counter a wewnątrz pętli, może być trudniejszy do odczytywania i debugowania kodu.Zmiana wartości start, end, lub step nie ma wpływu na wartości iteracji, które zostały określone podczas pierwszego wprowadzania pętli.

Jeśli możesz zagnieździć pętli, kompilator sygnalizuje błąd, jeśli napotka Next instrukcji zewnętrzny poziom zagnieżdżenia przed Next oświadczenie o poziomie wewnętrznym.Jednakże kompilator może wykryć to nakładających się błąd, tylko, jeśli określisz counter w każdym Next instrukcji.

Argument krok

Wartość step mogą być dodatnie lub ujemne.Ten parametr określa przetwarzanie pętli zgodnie z następującą tabelą:

Wartość kroku

Wykonuje pętlę, jeśli

Dodatnią lub zerem

counter< =end

Ujemne

counter> =end

Wartość domyślna step ma wartość 1.

Argument licznika

Poniższa tabela wskazuje, czy counter definiuje nowej zmiennej lokalnej, który jest objęty zakresem się na całą For…Next pętli.Ustalenie to zależy, czy datatype jest obecny i czy counter jest już zdefiniowany.

Jest datatype obecny?

Jest counter już zdefiniowane?

Wynik (czy counter definiuje nowej zmiennej lokalnej, który jest objęty zakresem się na całą For...Next pętli)

Nie

Tak

Nie, ponieważ counter jest już zdefiniowany.Jeśli zakres counter nie jest lokalne do procedury, pojawia się ostrzeżenie kompilacji.

Nie

Nie

TakTyp danych jest wywnioskować z start, end, i step wyrażenia.Aby uzyskać informacje na temat wnioskowanie, zobacz Option Infer — Instrukcja i Wnioskowanie o typie lokalnym (Visual Basic).

Tak

Tak

Tak, ale tylko wtedy, gdy istniejące counter zmienna jest zdefiniowana poza procedurą.Tej zmiennej pozostanie oddzielona.Jeśli zakres istniejących counter zmienna jest lokalne do procedury, wystąpi błąd kompilacji.

Tak

Nie

Tak

Typem danych counter określa typ iteracji, które należy wybrać jedną z następujących typów:

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

  • Wyliczenie, który został zadeklarowany za pomocą Enum — Instrukcja (Visual Basic).

  • An Object.

  • Typ T , który ma następujące operatory, gdzie B typ wskazuje że mogą być używane w Boolean wyrażenie.

    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

Opcjonalnie można określić counter zmienna in Next instrukcji.Ta składnia zwiększa czytelność tego programu, zwłaszcza w przypadku, gdy posiadać zagnieżdżonych For pętli.Należy określić zmienną, która pojawia się w odpowiednim For instrukcji.

start, end, I step wyrażenia mogą być dowolnego typu danych, który rozszerza się do rodzaju counter.Jeśli używany jest typ zdefiniowany przez użytkownika dla counter, może być konieczne zdefiniowanie CType operatora konwersji do konwersji typów z start, end, lub step do rodzaju counter.

Przykład

W następującym przykładzie usunięto wszystkie elementy z listy rodzajowy.Zamiast For Each...Next — Instrukcja (Visual Basic), w przykładzie pokazano For...Next instrukcji, która dokonuje iteracji w kolejności malejącej.W przykładzie użyto tej techniki, ponieważ removeAt metoda powoduje, że elementy po elemencie usunięto mieć niższe wartości indeksu.

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

Poniższy przykład wykonuje iterację przez wyliczenie, która jest zadeklarowana za pomocą Enum — Instrukcja (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

W poniższym przykładzie parametry instrukcji, należy użyć klasy, która ma przeciążeń operatora dla +, -, >=, i <= podmiotów gospodarczych.

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

Zobacz też

Informacje

While...End While — Instrukcja (Visual Basic)

Do...Loop — Instrukcja (Visual Basic)

Exit — Instrukcja (Visual Basic)

List

Koncepcje

Struktury pętli (Visual Basic)

Zagnieżdżone struktury sterujące (Visual Basic)

Inne zasoby

Kolekcje (C# i Visual Basic)