Inicio > Cursos > C# > Condicionales: if/else y switch
C#Fundamentos de C#Lección 5 de 20

Condicionales: if/else y switch

Las estructuras condicionales en C# son casi idénticas a otros lenguajes de la familia C: if/else para ramificaciones, switch/case para múltiples valores posibles. El switch clásico de C# requería break en cada case (igual que en Java/C++) para evitar "fall-through", donde el código continúa al siguiente case sin detenerse.

Las switch expressions (C# 8+) eliminan este problema: usan -> que nunca tiene fall-through, son más concisas y pueden devolver un valor directamente.

El pattern matching en C# (con is y switch expressions) es una de las características más modernas. Permite verificar no solo el valor sino el tipo de una variable: if (objeto is string s && s.Length > 0) verifica que es string Y lo asigna a s en un solo paso.

Las switch expressions con property patterns { Propiedad: valor } son especialmente poderosas para manejar objetos complejos de forma declarativa, como un árbol de decisiones limpio.

// if / else if / else
int nota = 85;
if (nota >= 90) {
    Console.WriteLine("Excelente");
} else if (nota >= 70) {
    Console.WriteLine("Bien");
} else if (nota >= 60) {
    Console.WriteLine("Suficiente");
} else {
    Console.WriteLine("Reprobado");
}

// Operador ternario
string estado = nota >= 60 ? "Aprobado" : "Reprobado";

// switch tradicional
switch (nota / 10) {
    case 10:
    case 9:
        Console.WriteLine("A"); break;
    case 8:
        Console.WriteLine("B"); break;
    default:
        Console.WriteLine("C"); break;
}

// switch expression (C# 8+) - más elegante
string clasificar(int n) => n switch {
    >= 90 => "Excelente",
    >= 70 => "Bien",
    >= 60 => "Suficiente",
    _ => "Reprobado"
};

// Pattern matching en if
object valor = 42;
if (valor is int numero && numero > 10) {
    Console.WriteLine($"Entero mayor a 10: {numero}");
}

// switch con patrones de tipo
void procesar(object obj) {
    switch (obj) {
        case int n when n > 0: Console.WriteLine($"Positivo: {n}"); break;
        case string s: Console.WriteLine($"Texto: {s}"); break;
        case null: Console.WriteLine("Es null"); break;
    }
}
Consejo🎯 Las switch expressions son más concisas y obligan a ser exhaustivas. El _ es el caso default que captura todo lo demás.
← Strings y Manipulación de TextoBucles: for, while, foreach →

Practica esta lección

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

Empezar a practicar