Trilhas
/
C#
C#
/
Programa
/
Instruções `switch`
In

Instruções `switch` em C#

2 exercícios

Sobre Instruções `switch`

As instruções switch têm uma história venerável nas linguagens de programação. Elas foram introduzidas em C, onde eram valorizadas pela velocidade. Essa velocidade vinha ao custo de uma funcionalidade bastante limitada. Em C#, o papel da instrução switch foi ampliado para além dos inteiros. As instruções switch podem abranger qualquer tipo, valor ou referência arbitrários.

Se você vem de uma linguagem funcional, trabalhar com instruções switch (e expressões switch, discutidas em outro lugar) é o mais perto que você vai chegar, em C#, de usar uniões discriminadas e correspondência de padrões. No entanto, elas estão muito longe do poder de uma união discriminada de impor a segurança de tipos.

As instruções switch simples se parecem com suas ancestrais de C, combinando switch, case, break e default.

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

O padrão acima pode ser usado com qualquer tipo simples (primitivos + strings).

Quando os tipos de referência entram em cena, uma sintaxe extra passa a ser necessária: primeiro para fazer o downcast do tipo e depois para adicionar guardas (when), embora as guardas também possam ser usadas com casos de valores simples. Isso é ilustrado abaixo:

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;
}
  • A cláusula default é opcional, mas normalmente é desejável.
  • A instrução break é obrigatória para qualquer cláusula case que não esteja vazia.
  • Obviamente, o tipo de todos os argumentos dos rótulos case deve ser derivado do tipo do argumento do switch. Um argumento do switch do tipo Object obviamente permite a maior variedade.
  • A expressão de guarda pode incluir qualquer coisa que esteja no escopo, não apenas membros do argumento do case.
  • Vários case com argumentos case diferentes podem se referir ao mesmo bloco de código.

A documentação da instrução switch traz uma introdução às instruções switch.

Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Instruções `switch`

A prática está bloqueada

Desbloqueie mais 6 exercícios para praticar Instruções `switch`