Translate

miércoles, 22 de octubre de 2025

Cómo tener varias líneas en un switch expression en C#


Desde C# 8, el lenguaje introdujo los switch expressions, una forma más concisa y expresiva de realizar asignaciones condicionales.

Pero hay una limitación importante, cada caso solo puede contener una expresión, no un bloque de varias sentencias.


Si intentás esto:


var result = value switch

{

    1 =>

    {

        Console.WriteLine("Caso 1");

        return "Uno";

    },

    _ => "Otro"

};


El compilador se queja: > *CS1525: Invalid expression term '{'*


Esto ocurre porque una switch expression espera una sola expresión por rama, no un bloque {}.

La pregunta es cómo resolverlo: 


Opción 1: Lambda invocada inmediatamente

Si necesitás ejecutar varias líneas y devolver un resultado, podés usar una lambda expression que se ejecuta al instante:


var result = value switch

{

    1 => (() =>

    {

        Console.WriteLine("Caso 1");

        var temp = 10 * 2;

        return $"Resultado: {temp}";

    })(),

    2 => "Dos",

    _ => "Otro"

};


El truco está en (() => { ... })(): una función anónima definida y ejecutada inmediatamente.


Opción 2: Método auxiliar

Cuando el bloque es más grande o se usa varias veces, conviene delegar la lógica a un método:


var result = value switch

{

    1 => CalcularCasoUno(),

    2 => "Dos",

    _ => "Otro"

};


string CalcularCasoUno()

{

    Console.WriteLine("Caso 1");

    var temp = 10 * 2;

    return $"Resultado: {temp}";

}


Más limpio, legible y fácil de testear.


Los switch expressions son ideales para lógica declarativa y corta, pero cuando necesitás más pasos, la solución está en envolver el bloque dentro de una lambda o extraerlo a un método auxiliar.