Tracks
/
C#
C#
/
Temario
/
Sentencias switch
Se

Sentencias switch en C#

2 ejercicios

Acerca de Sentencias switch

Las sentencias switch tienen una venerable historia en los lenguajes de programación. Se introdujeron en C, donde se apreciaban por su velocidad. Esa velocidad tenía como precio una funcionalidad muy limitada. En C#, el papel de la sentencia switch se ha ampliado más allá de los enteros. Las sentencias switch pueden abarcar cualquier tipo, valor o referencia arbitrarios.

Si vienes de un lenguaje funcional, trabajar con sentencias switch (y con las expresiones switch que se tratan en otra parte) es lo más cercano que encontrarás en C# al uso de uniones discriminadas y coincidencia de patrones. Sin embargo, no se acercan ni de lejos al poder de las uniones discriminadas para garantizar la seguridad de tipos.

Las sentencias switch simples se parecen a sus ancestros de C, combinando switch, case, break y default.

int direction = GetDirection();
switch (direction)
{
    case 1:
        GoLeft();
        break;
    case 2:
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

El patrón anterior se puede usar con cualquier tipo simple (primitivos + strings).

Cuando se agregan tipos de referencia a la mezcla, entra en juego sintaxis adicional: primero para convertir el tipo a un subtipo y luego para agregar guardas (when), aunque las guardas se pueden usar con casos de valores simples. Esto se ilustra a continuación:

Animal animal = GetAnimal();

switch(animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}
  • La cláusula default es opcional, pero por lo general es conveniente.
  • La sentencia break es obligatoria para cualquier cláusula case que no esté vacía.
  • Obviamente, el tipo de todos los argumentos de las etiquetas case debe derivarse del tipo del argumento de switch. Un argumento de switch de tipo Object obviamente permite el rango más amplio.
  • La expresión de guarda puede incluir cualquier cosa que esté en el ámbito, no solo miembros del argumento de case.
  • Varios case con argumentos case diferentes pueden referirse al mismo bloque de código.

La documentación de la sentencia switch ofrece una introducción a las sentencias switch.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva

Aprende Sentencias switch

La práctica está bloqueada

Desbloquea 6 ejercicios más para practicar Sentencias switch