Errores habituales al iterar
Modificar una colección mientras la recorre
Errores habituales al iterar es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
Errores frecuentes en la iteración
Los bucles son sencillos, pero algunos errores hacen tropezar a los principiantes una y otra vez.
En esta lección veremos los errores de iteración más comunes y cómo evitarlos.
Modificar durante la iteración
El error más grave consiste en cambiar una colección mientras la recorre con foreach.
Agregar o quitar elementos durante la iteración produce una InvalidOperationException en tiempo de ejecución.
foreach (var n in list)
{
if (n < 0) list.Remove(n); // ERROR at runtime
}La solución segura
Para quitar elementos mientras recorre la colección, itere sobre una copia o recopile primero los elementos y elimínelos después.
Recorrer list.ToList() le proporciona una instantánea independiente que puede recorrer.
var list = new List<int> { 1, -2, 3, -4 };
foreach (var n in list.ToList())
{
if (n < 0) list.Remove(n);
}
Console.WriteLine(string.Join(",", list));Error de desfase en los bucles for
En un bucle for manual, usar <= en lugar de < hace que se acceda a una posición posterior al final.
Los índices válidos van de 0 a Length - 1, por lo que la condición debe ser i < Length.
for (int i = 0; i <= arr.Length; i++) // BUG: <= goes too far
{
Console.WriteLine(arr[i]);
}IndexOutOfRange
Ese error de desfase provoca una IndexOutOfRangeException.
foreach evita por completo este problema porque nunca usa un índice. Prefiéralo cuando solo necesite leer elementos.
string[] arr = { "a", "b", "c" };
for (int i = 0; i < arr.Length; i++) // correct: < Length
{
Console.WriteLine(arr[i]);
}Esperar que foreach cambie los elementos
Asignar un valor a la variable del bucle no cambia la colección y, en el caso de los tipos de valor, esa variable es una copia.
Para actualizar los elementos, use un bucle for con indexación.
int[] nums = { 1, 2, 3 };
for (int i = 0; i < nums.Length; i++)
{
nums[i] = nums[i] * 10;
}
Console.WriteLine(string.Join(",", nums));Colección null
Llamar a foreach sobre una referencia null produce una NullReferenceException.
Una colección vacía no supone ningún problema, pero null sí. Compruebe o inicialice la colección antes de recorrerla.
List<int> data = null;
if (data != null)
{
foreach (var x in data) Console.WriteLine(x);
}Confusión sobre el ámbito de las variables
La variable del bucle solo existe dentro del cuerpo del bucle.
Intentar usarla después del bucle provoca un error de compilación, porque queda fuera de ámbito cuando termina el bucle.
foreach (var n in nums)
{
Console.WriteLine(n);
}
// Console.WriteLine(n); // ERROR: n not in scope hereOlvidar las llaves
Sin llaves, solo la siguiente instrucción individual pertenece al bucle.
Esto puede alterar la lógica sin que resulte evidente. Use siempre llaves en cuerpos de varias líneas para dejar clara la intención.
foreach (var n in nums)
Console.WriteLine(n);
Console.WriteLine("runs once, not per item");Riesgo de bucle infinito con while
A diferencia de foreach, un bucle while puede ejecutarse indefinidamente si su condición nunca se vuelve falsa.
Asegúrese siempre de que algo dentro del bucle avance hacia la condición de salida.
int i = 0;
while (i < 3)
{
Console.WriteLine(i);
i++; // forgetting this would loop forever
}Elegir el bucle adecuado
Leer todos los elementos sin necesitar un índice → foreach.
Necesitar el índice o tener que modificar elementos en su posición → for. Repetir hasta que cambie una condición → while.
Comprobación rápida
Compruebe lo que ha aprendido sobre los errores de iteración.
Repaso
Ha aprendido a evitar modificar una colección durante foreach, los errores de desfase con <=, las colecciones null y la confusión sobre el ámbito.
Elija foreach para leer, for para modificar mediante un índice y while para bucles basados en una condición con una salida clara.
Preguntas frecuentes
¿La lección «Errores habituales al iterar» es gratis?
Sí — el texto completo de «Errores habituales al iterar» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Errores habituales al iterar»?
Modificar una colección mientras la recorre Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Errores habituales al iterar»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- El bucle foreach
- Iterar colecciones
- break y continue
- Errores habituales al iterar