Storia della domanda
Il ciclo For...Next esiste in Visual Basic sin dalle prime versioni, consentendo di iterare su un intervallo di valori, spesso utilizzato per lavorare con array e collezioni. In VB.NET è stato aggiunto un contatore semanticamente più rigoroso e il supporto per il passo (Step).
Problema
Un errore classico è l'alterazione del valore del contatore del ciclo (ad esempio, i), che porta a comportamenti errati: il contatore sarà comunque automaticamente incrementato/decrementato alla fine di ogni iterazione. È anche importante impostare correttamente i limiti dell'iterazione sulle collezioni (ad esempio, For i = 0 To arr.Length - 1).
Soluzione
Utilizza sempre contatori immutabili o assegna subito a una variabile l'espressione per il limite superiore, se la collezione può cambiare all'interno del ciclo. Non alterare esplicitamente la variabile contatore all'interno del ciclo.
Esempio di codice:
Dim arr() As Integer = {1, 2, 3, 4} For i As Integer = 0 To arr.Length - 1 Console.WriteLine(arr(i)) Next
Caratteristiche chiave:
Cosa succede se si modifica manualmente il contatore all'interno del ciclo?
Il valore cambierà realmente solo all'interno dell'iterazione corrente, ma alla fine dell'iterazione Visual Basic eseguirà automaticamente l'incremento/decremento, conducendo a un numero imprevedibile di passaggi.
For i = 1 To 5 If i = 3 Then i = 1 Console.WriteLine(i) Next
È possibile utilizzare For...Next per iterare su collezioni, come List(Of T)?
Sì, ma è preferibile utilizzare For Each per le collezioni, per evitare errori con dimensioni mutabili. For...Next memorizza solo gli indici.
Cosa succede se il limite superiore è inferiore a quello inferiore con un passo positivo?
Il ciclo non verrà eseguito nemmeno una volta.
For i = 5 To 1 ' senza Step - il ciclo non verrà eseguito ... Next
Il contatore veniva modificato manualmente al rilevamento di un certo elemento, il tentativo di saltare futuri elementi ha portato a saltare alcune iterazioni e a un ciclo infinito.
Pro:
Contro:
Utilizzo di una variabile separata per controllare le condizioni, assenza di interferenze nel contatore del ciclo.
Pro:
Contro: