Historia de la pregunta
El ciclo For...Next existe en Visual Basic desde las primeras versiones, permitiendo recorrer un rango de valores, y se utiliza a menudo para trabajar con matrices y colecciones. En VB.NET se añadió un contador semánticamente más estricto y soporte para paso (Step).
Problema
Un error clásico es modificar el valor del contador del ciclo (por ejemplo, i), lo que lleva a un comportamiento erróneo: el contador aún se incrementa/decrementa automáticamente al final de cada iteración. También es importante establecer correctamente los límites para recorrer colecciones (por ejemplo, For i = 0 To arr.Length - 1).
Solución
Siempre utiliza contadores inmutables o coloca de inmediato en una variable la expresión para el límite superior, si la colección puede cambiarse dentro del ciclo. No modifiques explícitamente la variable del contador dentro del ciclo.
Ejemplo de código:
Dim arr() As Integer = {1, 2, 3, 4} For i As Integer = 0 To arr.Length - 1 Console.WriteLine(arr(i)) Next
Características clave:
¿Qué ocurrirá si modificas manualmente el contador dentro del ciclo?
El valor realmente cambiará solo dentro de la iteración actual, pero al final de la iteración Visual Basic realizará automáticamente el incremento/decremento, lo que llevará a un número impredecible de pasadas.
For i = 1 To 5 If i = 3 Then i = 1 Console.WriteLine(i) Next
¿Se puede usar For...Next para recorrer colecciones como List(Of T)?
Sí, pero es preferible usar For Each para colecciones para evitar errores con el tamaño cambiante. For...Next solo almacena índices.
¿Qué ocurre si el límite superior es menor que el límite inferior con un paso positivo?
El ciclo no se ejecutará ni una vez.
For i = 5 To 1 ' sin Step - el ciclo no se ejecutará ... Next
El contador se modificó manualmente al encontrar un elemento específico, el intento de saltar futuros elementos llevó a saltarse algunas iteraciones y a un ciclo infinito.
Ventajas:
Desventajas:
Uso de una variable separada para controlar condiciones, sin interferir en el contador del ciclo.
Ventajas:
Desventajas: