Ricerca…


Per il prossimo

For ... Next ciclo Next viene utilizzato per ripetere la stessa azione per un numero finito di volte. Le istruzioni all'interno del seguente ciclo verranno eseguite 11 volte. La prima volta, i avrà il valore 0, la seconda volta avrà il valore 1, l'ultima volta che avrà il valore 10.

For i As Integer = 0 To 10
    'Execute the action
    Console.Writeline(i.ToString)
Next

Qualsiasi espressione intera può essere utilizzata per parametrizzare il ciclo. È consentito, ma non richiesto, che la variabile di controllo (in questo caso i ) venga dichiarata anche dopo il Next . È consentito che la variabile di controllo sia dichiarata in anticipo, anziché all'interno dell'istruzione For .

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

Essere in grado di definire gli interi Start ed End consente di creare loop che fanno riferimento direttamente ad altri oggetti, come ad esempio:

For i = 0 to DataGridView1.Rows.Count - 1
    Console.Writeline(DataGridView1.Rows(i).Cells(0).Value.ToString)
Next

Ciò quindi eseguirà un ciclo attraverso ogni riga in DataGridView1 ed eseguirà l'azione di scrivere il valore di Column 1 sulla console. (Il -1 è perché la prima riga delle righe contate sarebbe 1, non 0)

È anche possibile definire come deve essere incrementata la variabile di controllo.

For i As Integer = 1 To 10 Step 2
    Console.Writeline(i.ToString)
Next 

Questo produce:

1 3 5 7 9

È anche possibile decrementare la variabile di controllo (conto alla rovescia).

For i As Integer = 10 To 1 Step -1
    Console.Writeline(i.ToString)
Next

Questo produce:

10 9 8 7 6 5 4 3 2 1

Non si dovrebbe tentare di utilizzare (leggere o aggiornare) la variabile di controllo al di fuori del ciclo.

Per ogni ... Ciclo successivo per il looping attraverso la raccolta di elementi

È possibile utilizzare un ciclo For Each...Next per eseguire iterazioni su qualsiasi tipo IEnumerable . Ciò include matrici, elenchi e qualsiasi altra cosa che può essere di tipo IEnumerable o restituisce un oggetto IEnumerable.

Un esempio di looping di una proprietà di DataTable's Rows sarebbe simile a questo:

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 

Una cosa importante da notare è che la collezione non deve essere modificata mentre si trova in un ciclo For Each . Ciò causerebbe un System.InvalidOperationException con il messaggio:

La raccolta è stata modificata; l'operazione di enumerazione potrebbe non essere eseguita.

Durante il ciclo per iterare mentre alcune condizioni sono vere

Un ciclo While inizia valutando una condizione. Se è vero, viene eseguito il corpo del ciclo. Dopo che il corpo del ciclo è stato eseguito, la condizione While viene valutata di nuovo per determinare se rieseguire il corpo.

Dim iteration As Integer = 1
While iteration <= 10
  Console.Writeline(iteration.ToString() & " ")

  iteration += 1
End While

Questo produce:

1 2 3 4 5 6 7 8 9 10

Attenzione: un ciclo While può portare a un loop infinito . Considera cosa accadrebbe se venisse rimossa la riga di codice che incrementa l' iteration . In tal caso la condizione non sarebbe mai Vero e il ciclo continuerebbe indefinitamente.

Do ... Loop

Usa Do...Loop per ripetere un blocco di istruzioni While o Until una condizione è vera, controllando la condizione all'inizio o alla fine del ciclo.

Dim x As Integer = 0
Do
    Console.Write(x & " ")
    x += 1
Loop While x < 10

o

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

o

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 può essere usato per saltare alla successiva iterazione del ciclo:

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

Puoi terminare il ciclo con Exit Do - nota che in questo esempio, la mancanza di qualsiasi condizione causerebbe altrimenti un loop infinito:

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

Cortocircuito

Qualsiasi ciclo può essere terminato o continuato presto in qualsiasi momento utilizzando le istruzioni Exit o Continue .

Uscita

Puoi interrompere qualsiasi ciclo uscendo presto. Per fare ciò, puoi usare la parola chiave Exit insieme al nome del loop.

Ciclo continuo Uscita Dichiarazione
Per Exit For
Per ciascuno Exit For
Fare mentre Exit Do
Mentre Exit While

L'uscita anticipata di un ciclo è un ottimo modo per aumentare le prestazioni, effettuando il ciclo solo del numero necessario di volte per soddisfare le esigenze dell'applicazione. Di seguito è riportato un esempio in cui il ciclo uscirà una volta trovato il numero 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)

Proseguendo

Oltre a uscire presto, puoi anche decidere di passare alla prossima iterazione del ciclo. Questo è fatto facilmente usando l'istruzione Continue . Proprio come Exit , è preceduto dal nome del ciclo.

Ciclo continuo Continua Dichiarazione
Per Continue For
Per ciascuno Continue For
Fare mentre Continue Do
Mentre Continue While

Ecco un esempio di come impedire l'aggiunta di numeri pari alla somma.

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

Consigli d'uso

Esistono due tecniche alternative che possono essere utilizzate anziché utilizzare Exit o Continue .

È possibile dichiarare una nuova variabile booleana, inizializzandola su un valore e impostandola condizionalmente sull'altro valore all'interno del ciclo; quindi si utilizza un'istruzione condizionale (ad esempio If ) basata su tale variabile per evitare l'esecuzione delle istruzioni all'interno del ciclo nelle iterazioni successive.

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

Una delle obiezioni a questa tecnica è che potrebbe essere inefficiente. Ad esempio, se nell'esempio precedente N è 1000000 e il primo elemento dell'array A è uguale a SoughtValue , il ciclo eseguirà un'ulteriore ripetizione di 999999 volte senza fare nulla di utile. Tuttavia, in alcuni casi questa tecnica può avere il vantaggio di una maggiore chiarezza.

Puoi usare l'istruzione GoTo per saltare fuori dal giro. Nota che non puoi usare GoTo per saltare in loop.

    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)

Questa tecnica a volte può essere il modo migliore per saltare fuori dal ciclo ed evitare una o più istruzioni che vengono eseguite subito dopo la fine naturale del ciclo.

Dovresti prendere in considerazione tutte le alternative e utilizzare quella che meglio si adatta alle tue esigenze, considerando l'efficienza, la velocità di scrittura del codice e la leggibilità (quindi la manutenibilità).

Non GoTo scoraggiare dall'uso di GoTo in quelle occasioni in cui è la migliore alternativa.

Ciclo annidato

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.

La struttura di un ciclo annidato For For Next è:

For counter1=startNumber to endNumber (Step increment)

    For counter2=startNumber to endNumber (Step increment)

        One or more VB statements

    Next counter2

Next  counter1

Esempio :

    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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow