Switch em C#: quando usar no lugar de vários if (com exemplos)
- Gerar link
- X
- Outros aplicativos

Resumo rápido
- O
switchescolhe um caminho comparando um valor com uma lista de opções (case). - Cada
casetermina combreak. - O
defaultroda quando nenhuma opção bate, como oelse. - Vários
casepodem dividir o mesmo bloco. - A expressão switch (
=>) devolve um valor direto, em menos linhas.
Você chega ao mercador e ele mostra o menu: 1 para comprar, 2 para vender, 3 para melhorar a arma, 4 para sair. Dá para escrever isso com uma escada de if/else if, mas fica comprido. Para esse tipo de decisão, o C# tem o switch.
Se ainda não viu o if, comece pelo post anterior da série: If, else e else if em C#.
A estrutura do switch

O switch recebe um valor e compara com cada case. Quando encontra o igual, executa aquele bloco até o break.
C#
Console.WriteLine("1 - Comprar | 2 - Vender | 3 - Melhorar arma | 4 - Sair");
int opcao = 2;
switch (opcao)
{
case 1:
Console.WriteLine("O que você vai levar?");
break;
case 2:
Console.WriteLine("Deixa eu ver seus tesouros.");
break;
case 3:
Console.WriteLine("Vamos deixar essa arma mais forte.");
break;
case 4:
Console.WriteLine("Volte sempre!");
break;
default:
Console.WriteLine("Opção inválida.");
break;
}
Saída esperada
1 - Comprar | 2 - Vender | 3 - Melhorar arma | 4 - Sair
Deixa eu ver seus tesouros.
Para ler a opção digitada pelo jogador, troque a linha int opcao = 2; por int opcao = int.Parse(Console.ReadLine());.
Para que servem o break e o default
- break encerra o
switch. Em C# ele é obrigatório no fim de cadacaseque tem código; sem ele o programa nem compila. - default é o "nenhuma das anteriores". Use sempre que o valor puder vir de fora (o que o usuário digitou, por exemplo).
Vários case no mesmo bloco
Quando opções diferentes devem fazer a mesma coisa, empilhe os case sem código entre eles:
C#
string erva = "verde";
switch (erva)
{
case "verde":
case "vermelha":
Console.WriteLine("Pode combinar.");
break;
case "amarela":
Console.WriteLine("Aumenta a vida máxima.");
break;
default:
Console.WriteLine("Erva desconhecida.");
break;
}
Saída esperada
Pode combinar.
⚠️ Com string, o switch diferencia maiúsculas: "Verde" não bate com "verde". Se o texto vier do usuário, use switch (erva.ToLower()).
Expressão switch: o jeito curto
Quando cada opção só serve para escolher um valor, o C# moderno tem a expressão switch, com =>. O _ faz o papel do default.
C#
string arma = "escopeta";
int dano = arma switch
{
"pistola" => 10,
"escopeta" => 40,
"rifle" => 60,
_ => 1
};
Console.WriteLine($"Dano da {arma}: {dano}");
Saída esperada
Dano da escopeta: 40
Switch ou if: qual usar?

| Situação | Melhor escolha |
|---|---|
| Um valor com várias opções fixas (menu, tipo de item, dia da semana) | switch |
| Faixas de valores (vida >= 70, vida >= 30...) | if / else if |
| Condições com variáveis diferentes (temChave && vida > 0) | if |
| Escolher um valor a partir de outro (arma → dano) | expressão switch |
DESAFIO
Tente resolver antes de abrir a resposta. Sobreviveu? Vá para o próximo.
O que acontece se você apagar o
breakdocase 1no menu do mercador?Ver resposta
O programa não compila. O C# acusa que o controle não pode "cair" de um
casepara o próximo.Escreva uma expressão switch que transforme a dificuldade ("facil", "normal", "profissional") na quantidade de vida inicial: 150, 100 e 50. Qualquer outra vira 100.
Ver resposta
int vida = dificuldade switch { "facil" => 150, "normal" => 100, "profissional" => 50, _ => 100 };Para decidir a cor da barra de vida (verde, amarela, vermelha) por faixas, você usaria
switchclássico ouif/else if?Ver resposta
if/else if, porque são faixas de valores, não opções fixas.
Conclusão
O switch deixa menus e escolhas fixas mais fáceis de ler e de manter. Agora que o programa já sabe decidir, falta ele saber repetir: enquanto houver inimigos, continue lutando. Isso é com os laços de repetição.
📖 Continue a série: While e For em C#.
Comentários
Postar um comentário