Inicio > Cursos > C# > Bucles: for, while, foreach
C#Fundamentos de C#Lección 6 de 20

Bucles: for, while, foreach

C# tiene cuatro tipos de bucles. for es para repetir un número conocido de veces con un contador. while repite mientras una condición sea true. do-while es igual que while pero garantiza ejecutar el cuerpo al menos una vez (la condición se verifica al final). foreach es el más cómodo para colecciones: recorre cada elemento sin necesidad de índice ni verificación de límites, lo que hace el código más seguro y legible.

Para la mayoría de trabajo con colecciones (listas, arrays, diccionarios), el foreach es el preferido en C#. Su ventaja sobre el for con índice es que es imposible cometer errores de fuera de rango o confundir el índice. break sale del bucle inmediatamente; continue salta al inicio de la siguiente iteración.

En C# moderno, muchos casos de bucles se pueden reemplazar elegantemente con LINQ: .Where(), .Select(), .Sum() son más declarativos que bucles manuales.

// for clásico
for (int i = 0; i < 5; i++) {
    Console.Write($"{i} "); // 0 1 2 3 4
}

// while
int contador = 0;
while (contador < 5) {
    Console.Write($"{contador} ");
    contador++;
}

// do-while (siempre ejecuta al menos una vez)
int n = 0;
do {
    Console.WriteLine(n);
    n++;
} while (n < 3);

// foreach - la más usada con colecciones
var frutas = new List<string> { "manzana", "pera", "uva" };
foreach (var fruta in frutas) {
    Console.WriteLine(fruta.ToUpper());
}

// foreach con array
int[] numeros = { 1, 2, 3, 4, 5 };
foreach (int num in numeros) {
    Console.Write($"{num * 2} "); // 2 4 6 8 10
}

// break y continue
for (int i = 0; i < 10; i++) {
    if (i == 3) continue; // salta el 3
    if (i == 7) break;    // sale del bucle en 7
    Console.Write($"{i} "); // 0 1 2 4 5 6
}

// Bucle infinito con break
while (true) {
    string? input = Console.ReadLine();
    if (input == "salir") break;
    Console.WriteLine($"Dijiste: {input}");
}
Consejo🔄 Para colecciones, siempre prefiere foreach sobre for con índice. Es más legible y menos propenso a errores de off-by-one.
← Condicionales: if/else y switchArrays →

Practica esta lección

Resuelve los ejercicios del curso de C# en la app, gratis y con corrección automática.

Empezar a practicar