Chave C#

Resumo : neste tutorial, você aprenderá como usar a switchinstruçã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 switchinstrução avalia uma expressão e seleciona um bloco para execução se a expressão satisfizer uma condição. A sintaxe da switchinstruçã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 switchinstrução corresponde a expressionwith label1, label2, label3,… em cada casecláusula de cima para baixo.

Se expressioncorresponder a label, a switchinstrução executará o bloco correspondente e passará o controle para a instrução seguinte.

Se expressionnão corresponder a nenhum rótulo, a switchinstrução executa o bloco da defaultcláusula.

A defaultcláusula é opcional. Se você não especificá-lo e expressionnão corresponder a any label, a switchinstruçã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 switchinstrução funciona.

interruptor c#

Exemplo de instrução switch C#

O programa a seguir usa a switchinstruçã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 switchinstruçã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 switchinstruçã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 switchinstrução executará o bloco 1 se expressioncorresponder a firstCasee secondCase. Da mesma forma, ele executará o bloco 2 se expressioncorresponder a thirdCasee fourthCase.

Se expressionnão corresponder a nenhum rótulo nas casecláusulas, ele executará o bloco n na defaultclá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 switchextrato 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 switchinstrução.

Reescreveremos o programa de cálculo do índice de massa corporal (IMC) no if else iftutorial do demonstrativo usando o switchdemonstrativo 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 kge 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 switchdeclaração é muito mais legível do que a if else ifdeclaração.

Resumo

  • Use a switchinstrução para executar um bloco se uma expressão corresponder a um padrão.
  • A switchinstruçã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 switchinstrução executa o bloco na defaultcláusula se a expressão não corresponder a nenhum caso. A cláusula padrão é opcional.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *