Cómo usar la declaración switch en C#

Estrada Web Group
Estrada Web Group
Cómo usar la declaración switch en C#

Resumen: en este tutorial, aprenderás a usar la declaración switch de C# para seleccionar un bloque para su ejecución si una expresión coincide con una patrón.

Introducción a la declaración switch de C#

La instrucción switch evalúa una expresión y selecciona un bloque de código para su ejecución si la expresión cumple una condición. La sintaxis de la sentencia switch es la siguiente:

switch (expression)
{
    case label1:
        // block1;
        break;
    case label2:
        // block2;
        break;
    case label3:
        // block3;
        break;
    default:
        // blockn;
        break;
}

En esta sintaxis, la declaración switch busca de arriba hacia abajo que expression coincida con una de las label1, label2, label3...

Si expression coincide con un label, la declaración switch ejecutará el bloque de código correspondiente y pasará el control a la siguiente declaración.

Si expression no coincide con ningún label, la declaración de cambio ejecuta el bloque de código en la cláusula default.

La cláusula default es opcional. Si no lo especificas y la expresión no coincide con ningún label, la declaración switch no ejecuta ningún bloque y pasa el control a la declaración posterior.

La declaración switch utiliza muchos patrones para hacer coincidir la expresión con las etiquetas. En este tutorial, se centrará en los siguientes patrones:

  • Patrón constante: prueba si el resultado de la expresión es igual a una constante.
  • Patrón relacional: compara el resultado de la expresión con una constante utilizando un operador relacional como <, <=, >, >=.

Ejemplo del uso de switch en C#

El siguiente programa usa la instrucción switch para mostrar el nombre del mes según el número de mes ingresado por los usuarios:

Console.Write("Captura un mes (1-12): ");
int month = Convert.ToInt32(Console.ReadLine());

string name;

switch (month)
{
    case 1:
        name = "Ene";
        break;
    case 2:
        name = "Feb";
        break;
    case 3:
        name = "Mar";
        break;
    case 4:
        name = "Abr";
        break;
    case 5:
        name = "May";
        break;
    case 6:
        name = "Jun";
        break;
    case 7:
        name = "Jul";
        break;
    case 8:
        name = "Ago";
        break;
    case 9:
        name = "Sep";
        break;
    case 10:
        name = "Oct";
        break;
    case 11:
        name = "Nov";
        break;
    case 12:
        name = "Dic";
        break;
    default:
        name = "Mes no válido";
        break;
}


Console.WriteLine(name);


Cómo funciona.

Primero, solicita a los usuarios que ingresen un número del 1 al 12:

Console.Write("Captura un mes (1-12): ");
int month = Convert.ToInt32(Console.ReadLine());

En segundo lugar, haz coincidir el número del mes de entrada con un número del 1 al 12 utilizando la declaración switch y asigna el nombre del mes correspondiente.

Si el número del mes no está en el rango de 1 a 12, el nombre del mes será "Mes no válido":

string name;

switch (month)
{
    case 1:
        name = "Ene";
        break;
    case 2:
        name = "Feb";
        break;
    case 3:
        name = "Mar";
        break;
    case 4:
        name = "Abr";
        break;
    case 5:
        name = "May";
        break;
    case 6:
        name = "Jun";
        break;
    case 7:
        name = "Jul";
        break;
    case 8:
        name = "Ago";
        break;
    case 9:
        name = "Sep";
        break;
    case 10:
        name = "Oct";
        break;
    case 11:
        name = "Nov";
        break;
    case 12:
        name = "Dic";
        break;
    default:
        name = "Mes no válido";
        break;
}


Tercero, muestra el nombre del mes:

Console.WriteLine(name);

Agrupdar casos en el uso de switch en C#

Si tiene el mismo bloque que corresponde a varios casos, puedes agrupar casos en la declaración switch de esta manera:

switch (expression)
{

    case firstCase:
    case secondCase:
        // block 1
        break;

    case thirdCase:
    case fourthCase:
        // block 2
        break;
    default:
        // block n
        break;

}

En esta sintaxis, la declaración switch ejecutará el bloque 1 si expression coincide con el primer caso (firstCase) o el segundo caso (secondCase). Asimismo, ejecutará el bloque 2 si expression coincide con el tercer caso (thirdCase) o el cuarto caso (fourthCase).

Si la expresión no coincide con ninguna etiqueta en las cláusulas del caso, ejecutará el bloque n en la cláusula default.

El siguiente ejemplo solicita a los usuarios que ingresen un número de mes y muestren el nombre del trimestre correspondiente de ese mes:

Console.Write("Captura un mes (1-12): ");
int month = Convert.ToInt32(Console.ReadLine());

string quarter;

switch (month)
{
    case 1:
    case 2:
    case 3:
        quarter = " Trimestre 1";
        break;
    case 4:
    case 5:
    case 6:
        quarter = " Trimestre 2";
        break;
    case 7:
    case 8:
    case 9:
        quarter = " Trimestre 3";
        break;
    case 10:
    case 11:
    case 12:
        quarter = " Trimestre 4";
        break;

    default:
        quarter = "Trimestre inválido";
        break;
}

Console.WriteLine(quarter);

Cómo funciona.

Primero, solicita a los usuarios que ingresen un número de mes del 1 al 12:

Console.Write("Captura un mes (1-12): ");
int month = Convert.ToInt32(Console.ReadLine());


En segundo lugar, establece el trimestre en función del número de mes utilizando la declaración switch con casos grupales:

switch (month)
{
    case 1:
    case 2:
    case 3:
        quarter = " Trimestre 1";
        break;
    case 4:
    case 5:
    case 6:
        quarter = " Trimestre 2";
        break;
    case 7:
    case 8:
    case 9:
        quarter = " Trimestre 3";
        break;
    case 10:
    case 11:
    case 12:
        quarter = " Trimestre 4";
        break;

    default:
        quarter = "Trimestre inválido";
        break;
}



Tercero, muestra el trimestre:

Console.WriteLine(quarter);

Ejemplo de declaración switch de C# con patrón de relación

A partir de C# 9, puedes usar el operador relacional >, >=, <, <= para hacer coincidir el resultado de la expresión con constantes en la declaración switch.

Reescribiremos el programa de cálculo del índice de masa corporal (IMC) que utilizamos en el tutorial de sentencia if else if usando la sentencia switch con el patrón relacional:

Console.WriteLine("Body Mass Index (BMI) Calculation");

Console.WriteLine("Enter a weight (kg):");
var weight = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Enter a height (m):");
var height = Convert.ToDouble(Console.ReadLine());


double bmi = weight / (height * height);
string weightStatus = "";

switch (bmi)
{
    case < 18.5:
        weightStatus = "Underweight";
        break;
    case >= 18.5 and <= 24.9:
        weightStatus = "Healthy Weight";
        break;
    case >= 25 and <= 29.9:
        weightStatus = "Overweight";
        break;
    case > 30:
        weightStatus = "Obesity";
        break;
}


Console.WriteLine($"BMI: {bmi:0.#}");
Console.WriteLine($"Weight status:{ weightStatus}");

Cómo funciona.

Primero, solicita a los usuarios que ingresen el peso en kg y la altura en metros:

Console.WriteLine("Body Mass Index (BMI) Calculation");

Console.WriteLine("Enter a weight (kg):");
var weight = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Enter a height (m):");
var height = Convert.ToDouble(Console.ReadLine());

Segundo, calcula el IMC tomando el peso dividido por el cuadrado de la altura:

double bmi = weight / (height * height);

En tercer lugar, asigna el estado del peso en función del valor del IMC:

string weightStatus = "";

switch (bmi)
{
    case < 18.5:
        weightStatus = "Underweight";
        break;
    case >= 18.5 and <= 24.9:
        weightStatus = "Healthy Weight";
        break;
    case >= 25 and <= 29.9:
        weightStatus = "Overweight";
        break;
    case > 30:
        weightStatus = "Obesity";
        break;
}

Finalmente, muestra el estado de IMC y el estatus del peso:

Console.WriteLine($"BMI: {bmi:0.#}");
Console.WriteLine($"Weight status:{ weightStatus}");

Como puedes ver, la sentencia switch es mucho más legible que la sentencia if else if.

Resumen

  • Use la instrucción switch para ejecutar un bloque si una expresión coincide con un patrón.
  • La instrucción switch utiliza muchos patrones coincidentes.
  • El patrón constante comprueba si el resultado de la expresión es igual a una constante.
  • El patrón relacional prueba el resultado de la expresión con una constante utilizando el operador relacional <, <=, >, >=.
  • Un caso de grupo te permite ejecutar el mismo bloque que corresponde a varios casos.
  • La instrucción switch ejecuta el bloque en la cláusula default si la expresión no coincide con ningún caso. La cláusula default es opcional.
Compartir artículo:

Más artículos geniales

Funciones anónimas en C#

Funciones anónimas en C#

Resumen: En este artículo, aprenderás sobre las funciones anónimas y cómo puedes usarlas para hacer tu trabajo de desarrollo más fácil y eficiente.

Ver artículo completo
¿Cómo pasar datos a una función en C#?

¿Cómo pasar datos a una función en C#?

En este artículo, te mostraré cómo declarar y pasar diferentes tipos de parámetros a una función en C#, incluyendo parámetros por valor, por referencia, salida y opcionales

Ver artículo completo
¿Qué es un string en C#?

¿Qué es un string en C#?

Resumen: en este tutorial, aprenderás sobre el tipo string o cadenas de texto de C# y las operaciones básicas que puedes hacer con este tipo de datos.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla