C#: Condicionais

1. A instrução if

A instrução if executa um bloco de código com base no resultado de uma expressão booleana. Quando a condição é verdadeira, o bloco é executado; quando é falsa, ele é ignorado.

CSHARP
int score = 85;
if (score >= 60)
{
    Console.WriteLine("Passed");
}
TEXT 📖 Somente leitura
Passed

2. A instrução if...else

Use a estrutura if...else para executar um ramo quando a condição for verdadeira e outro quando for falsa.

CSHARP
int age = 16;
if (age >= 18)
{
    Console.WriteLine("Adult");
}
else
{
    Console.WriteLine("Minor");
}
TEXT 📖 Somente leitura
Minor

3. if...else if: ramificações múltiplas

Quando for necessário verificar várias condições mutuamente exclusivas, use else if para testá-las em ordem. Apenas o primeiro ramo correspondente será executado.

CSHARP
int score = 78;
if (score >= 90)
{
    Console.WriteLine("Excellent");
}
else if (score >= 80)
{
    Console.WriteLine("Good");
}
else if (score >= 60)
{
    Console.WriteLine("Pass");
}
else
{
    Console.WriteLine("Fail");
}
TEXT 📖 Somente leitura
Pass

4. if aninhado

As instruções if podem ser aninhadas, mas procure limitar o aninhamento a, no máximo, dois níveis. O aninhamento excessivo prejudica a legibilidade — considere extrair um método ou usar else if em vez disso.

▶ Exemplo

CSHARP
int age = 25;
bool hasTicket = true;
if (age >= 18)
{
    if (hasTicket)
    {
        Console.WriteLine("Admitted");
    }
    else
    {
        Console.WriteLine("Ticket required");
    }
}
else
{
    Console.WriteLine("Too young");
}
▶ Experimente
TEXT 📖 Somente leitura
Admitted

5. A instrução switch

Uma instrução switch compara uma expressão com vários valores constantes e executa o ramo case correspondente. Ao contrário do C/C++, o C# não permite o fall-through; cada caso deve terminar com break, return ou throw, caso contrário, ocorrerá um erro de compilação.

▶ Exemplo

CSHARP
int day = 3;
switch (day)
{
    case 1:
        Console.WriteLine("Monday");
        break;
    case 2:
        Console.WriteLine("Tuesday");
        break;
    case 3:
        Console.WriteLine("Wednesday");
        break;
    case 4:
        Console.WriteLine("Thursday");
        break;
    case 5:
        Console.WriteLine("Friday");
        break;
    default:
        Console.WriteLine("Weekend");
        break;
}
▶ Experimente
TEXT 📖 Somente leitura
Wednesday

Vários casos podem compartilhar a mesma lógica ao listar seus rótulos consecutivamente:

CSHARP
int month = 2;
switch (month)
{
    case 12:
    case 1:
    case 2:
        Console.WriteLine("Winter");
        break;
    case 3:
    case 4:
    case 5:
        Console.WriteLine("Spring");
        break;
    default:
        Console.WriteLine("Other season");
        break;
}
TEXT 📖 Somente leitura
Winter

Dica: Em C#, se você realmente precisar pular de um caso para outro, deve usar goto case x; não é permitido omitir o break para permitir a passagem direta.


6. Expressões switch (C# 8+)

O C# 8 introduziu as expressões switch, que são expressões e não instruções. Elas retornam o resultado correspondente com uma sintaxe mais concisa. Use _ para o ramo padrão.

▶ Exemplo

CSHARP
int code = 404;
string message = code switch
{
    200 => "OK",
    301 => "Moved",
    404 => "Not Found",
    500 => "Server Error",
    _ => "Unknown"
};
Console.WriteLine(message);
▶ Experimente
TEXT 📖 Somente leitura
Not Found

7. Noções básicas sobre correspondência de padrões

A partir do C# 7, é possível usar a correspondência de padrões na lógica condicional. As formas mais comuns incluem padrões de tipo (is Type variable) e condições “when”.

▶ Exemplo

CSHARP
object obj = "Hello C#";
if (obj is string s)
{
    Console.WriteLine($"String length: {s.Length}");
}
else
{
    Console.WriteLine("Not a string");
}
▶ Experimente
TEXT 📖 Somente leitura
String length: 8

Use uma condição when em um switch para adicionar condições adicionais:

CSHARP
int value = 15;
string category = value switch
{
    int i when i > 100 => "Extra large",
    int i when i > 10 => "Medium",
    int i when i > 0 => "Small",
    _ => "Invalid"
};
Console.WriteLine(category);
TEXT 📖 Somente leitura
Medium

8. O operador condicional ?:

O operador condicional ?:, também conhecido como operador ternário, é uma forma abreviada de if...else. A sintaxe é condition ? valueIfTrue : valueIfFalse, e a expressão completa resulta no valor correspondente.

▶ Exemplo

CSHARP
int age = 20;
string status = age >= 18 ? "Adult" : "Minor";
Console.WriteLine(status);
▶ Experimente
TEXT 📖 Somente leitura
Adult

Uso aninhado (evite aninhamento excessivo):

CSHARP
int score = 75;
string result = score >= 90 ? "A" : score >= 60 ? "B" : "C";
Console.WriteLine(result);
TEXT 📖 Somente leitura
B

Aviso: a legibilidade diminui drasticamente quando o operador condicional é aninhado em mais de dois níveis. Use instruções if...else if em vez disso.

❓ Perguntas Frequentes

P: As instruções switch em C# podem omitir o break para permitir o avanço automático (fall-through), como em C? R: Não. O C# proíbe o avanço automático em switch. Cada case deve terminar com break, return ou throw; caso contrário, ocorrerá um erro de compilação. Para compartilhar a lógica, liste vários rótulos de case consecutivamente.

P: Qual é a diferença entre uma expressão switch e uma instrução switch? R: Uma expressão switch é uma expressão que deve retornar um valor, utilizando => e ramos separados por vírgulas. Uma instrução switch é uma instrução que não requer um valor de retorno, utilizando blocos case/break.

P: Qual é a diferença entre is e ==? R: == compara valores para verificar se são iguais, enquanto is é usado para correspondência de padrões e pode verificar o tipo ao declarar uma variável, como obj is string s.

P: O operador condicional pode substituir todas as instruções if...else? R: Não. O operador condicional só funciona em cenários que retornam um valor e não pode conter várias instruções. Use if...else para lógicas complexas.

📖 Resumo

📝 Exercícios

  1. Escreva um programa que leia um número inteiro e determine se ele é positivo, negativo ou zero; em seguida, exiba o resultado
  2. Use uma expressão switch para associar um mês (1 a 12) ao nome da estação correspondente
  3. Escreva um programa que receba uma variável de objeto, utilize a correspondência de padrões is para determinar seu tipo (int, string ou outro) e exiba o tipo e o valor
  4. Use o operador condicional para converter uma nota numérica em uma nota alfabética (90 ou mais é A, 80 ou mais é B, 60 ou mais é C; caso contrário, D) e, em seguida, compare a legibilidade com uma versão usando if...else if
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%