Resumo : neste tutorial, você aprenderá como usar a switch
instrução C# para selecionar um bloco para execução se uma expressão corresponder a um padrão.
Introdução à instrução switch C#
A switch
instrução avalia uma expressão e seleciona um bloco para execução se a expressão satisfizer uma condição. A sintaxe da switch
instrução é a seguinte:
switch (expression)
{
case label1:
// block1;
break;
case label2:
// block2;
break;
case label3:
// block3;
break;
default:
// blockn;
break;
}
Linguagem de código: C# ( cs )
Nesta sintaxe, a switch
instrução corresponde a expression
with label1
, label2
, label3
,… em cada case
cláusula de cima para baixo.
Se expression
corresponder a label
, a switch
instrução executará o bloco correspondente e passará o controle para a instrução seguinte.
Se expression
não corresponder a nenhum rótulo, a switch
instrução executa o bloco da default
cláusula.
A default
cláusula é opcional. Se você não especificá-lo e expression
não corresponder a any label
, a switch
instrução não executará nenhum bloco e passará o controle para a instrução após ele.
A instrução switch usa muitos padrões para combinar a expressão com os rótulos. Neste tutorial, você se concentrará nos seguintes padrões:
- Um padrão constante: teste se o resultado da expressão é igual a uma constante.
- Um padrão relacional: compare o resultado da expressão com uma constante usando um operador relacional como <, <=, >, >=.
O fluxograma a seguir ilustra como a switch
instrução funciona.
Exemplo de instrução switch C#
O programa a seguir usa a switch
instrução para exibir o nome do mês com base no número do mês inserido pelos usuários:
Console.Write("Enter a month(1-12): ");
int month = Convert.ToInt32(Console.ReadLine());
string name;
switch (month)
{
case 1:
name = "Jan";
break;
case 2:
name = "Feb";
break;
case 3:
name = "Mar";
break;
case 4:
name = "Apr";
break;
case 5:
name = "May";
break;
case 6:
name = "Jun";
break;
case 7:
name = "Jul";
break;
case 8:
name = "Aug";
break;
case 9:
name = "Sep";
break;
case 10:
name = "Nov";
break;
case 11:
name = "Dec";
break;
case 12:
name = "Aug";
break;
default:
name = "Invalid month";
break;
}
Console.WriteLine(name);
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, peça aos usuários que insiram um número de 1 a 12:
Console.Write("Enter a month(1-12): ");
int month = Convert.ToInt32(Console.ReadLine());
Linguagem de código: C# ( cs )
Segundo, combine o número do mês de entrada com um número de 1 a 12 usando a switch
instrução e atribua o nome do mês de acordo.
Se o número do mês não estiver no intervalo de 1 a 12, o nome do mês será “Mês inválido”:
string name;
switch (month)
{
case 1:
name = "Jan";
break;
case 2:
name = "Feb";
break;
case 3:
name = "Mar";
break;
case 4:
name = "Apr";
break;
case 5:
name = "May";
break;
case 6:
name = "Jun";
break;
case 7:
name = "Jul";
break;
case 8:
name = "Aug";
break;
case 9:
name = "Sep";
break;
case 10:
name = "Nov";
break;
case 11:
name = "Dec";
break;
case 12:
name = "Aug";
break;
default:
name = "Invalid month";
break;
}
Linguagem de código: C# ( cs )
Terceiro, exiba o nome do mês:
Console.WriteLine(name);
Linguagem de código: C# ( cs )
Caso de grupo na instrução switch C#
Se você tiver o mesmo bloco que corresponde a vários casos, poderá agrupar os casos na switch
instrução assim:
switch (expression)
{
case firstCase:
case secondCase:
// block 1
break;
case thirdCase:
case fourthCase:
// block 2
break;
default:
// block n
break;
}
Linguagem de código: C# ( cs )
Nesta sintaxe, a switch
instrução executará o bloco 1 se expression
corresponder a firstCase
e secondCase
. Da mesma forma, ele executará o bloco 2 se expression
corresponder a thirdCase
e fourthCase
.
Se expression
não corresponder a nenhum rótulo nas case
cláusulas, ele executará o bloco n na default
cláusula.
O exemplo a seguir solicita que os usuários insiram um número de mês e exibam o nome do trimestre correspondente desse mês:
Console.Write("Enter a month(1-12): ");
int month = Convert.ToInt32(Console.ReadLine());
string quarter;
switch (month)
{
case 1:
case 2:
case 3:
quarter = "Q1";
break;
case 4:
case 5:
case 6:
quarter = "Q2";
break;
case 7:
case 8:
case 9:
quarter = "Q3";
break;
case 10:
case 11:
case 12:
quarter = "Q4";
break;
default:
quarter = "Invalid quarter";
break;
}
Console.WriteLine(quarter);
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, peça aos usuários que insiram um número de mês de 1 a 12:
Console.Write("Enter a month(1-12): ");
int month = Convert.ToInt32(Console.ReadLine());
Linguagem de código: C# ( cs )
Segundo, defina o trimestre com base no número do mês usando o switch
extrato com casos de grupo:
string quarter;
switch (month)
{
case 1:
case 2:
case 3:
quarter = "Q1";
break;
case 4:
case 5:
case 6:
quarter = "Q2";
break;
case 7:
case 8:
case 9:
quarter = "Q3";
break;
case 10:
case 11:
case 12:
quarter = "Q4";
break;
default:
quarter = "Invalid quarter";
break;
}
Linguagem de código: C# ( cs )
Terceiro, exiba o nome do trimestre:
Console.WriteLine(quarter);
Linguagem de código: C# ( cs )
Instrução switch C# com exemplo de padrão de relação
A partir do C# 9, você pode usar o operador relacional >
, >=
, <
, <=
para corresponder o resultado da expressão com constantes na switch
instrução.
Reescreveremos o programa de cálculo do índice de massa corporal (IMC) no if else if
tutorial do demonstrativo usando o switch
demonstrativo com o padrão 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}");
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, solicite aos usuários que insiram seu peso kg
e altura m
:
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());
Linguagem de código: C# ( cs )
Segundo, calcule o IMC dividindo o peso pelo quadrado da altura:
double bmi = weight / (height * height);
Linguagem de código: C# ( cs )
Terceiro, atribua o status do peso com base no valor do 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;
}
Linguagem de código: C# ( cs )
Por fim, exiba o IMC e o status do peso:
Console.WriteLine($"BMI: {bmi:0.#}");
Console.WriteLine($"Weight status:{ weightStatus}");
Linguagem de código: C# ( cs )
Como você pode ver, a switch
declaração é muito mais legível do que a if else if
declaração.
Resumo
- Use a
switch
instrução para executar um bloco se uma expressão corresponder a um padrão. - A
switch
instrução usa muitos padrões de correspondência. - Use o padrão constante para testar se o resultado da expressão é igual a uma constante.
- Use o padrão relacional para testar o resultado da expressão com uma constante usando o operador relacional <, <=, >, >=.
- Use um caso de grupo para executar o mesmo bloco que corresponde a vários casos.
- A
switch
instrução executa o bloco nadefault
cláusula se a expressão não corresponder a nenhum caso. A cláusula padrão é opcional.