C# 8.0 - A instrução switch
Hoje vou apresentar com mais detalhes a instrução switch na versão 8.0 da linguagem C#. |
Temos muitas novidades na versão 8.0 da linguagem C# e eu já apresentei um resumo das principais neste artigo: C# 8.0 - As novidades da nova versão
Para poder usar os novos recursos basta instalar a última versão do Visual Studio Community 2019 e criar um projeto do tipo Console Application para .NET Core:
Vamos iniciar com um código bem simples usando a nova instrução switch:
Dando uma espiada no código acima, se você já esta familiarizado com a instrução switch, já pode entender o que o código vai fazer.
O que chama a atenção é a ausência das palavras-chave case e break (ou return).
Na nova versão
eles não são necessárias para alternar expressões. O que é menos óbvio é que o
que segue a seta (=>) é uma
expressão.
E como definir um valor padrão (default) na nova versão ?
Desde a versão 7, os switch cases podem usar a correspondência de padrões; portanto, em vez de usar a palavra-chave "default", o padrão de correspondência total pode ser usado. Assim basta usar o sinal "_" (sublinhado).
Assim poderíamos alterar o código conforme abaixo:
Os padrões são combinados um a um de cima para baixo, portanto, não é uma boa idéia colocar o valor padrão acima de qualquer outra correspondência.
Na verdade, o compilador C# alerta sobre isso. Se você tentou fazer isso, provavelmente receberá o seguinte erro: The pattern has already handled by a previous arm of the switch expression
Todas as expressões das opções switch cases devem ser
calculadas para o mesmo tipo (a menos que lançem uma exceção). Por exemplo,
todas int, ou strings, etc., neste caso a instrução switch
é semelhante ao operador ternário.
Mas como executar vários comandos na instrução ?
Uma solução, que talvez não seja a ideal , é usar lambdas.
Vamos supor que desejamos realizar as operações e fazer o log das mesmas.
Ainda podemos usar expressões para avaliação e atribuição de valores como mostrado a seguir:
Para concluir vejamos um exemplo completo usando a instrução switch
using static System.Console;
namespace CShp_Switch1
{
class Program
{
static void Main(string[] args)
{
Calculadora c1 = new Calculadora(50, 10, "*");
c1.Imprimir();
Calculadora c2 = new Calculadora(50, 10, "+");
c2.Imprimir();
Calculadora c3 = new Calculadora(50, 10, "*");
c3.Imprimir();
ReadLine();
}
}
public class Calculadora
{
public Calculadora(int a, int b, string operacao)
{
this.Numero1 = a;
this.Numero2 = b;
this.Operacao = operacao;
this.Resultado = this.Operacao switch
{
"+" => this.Numero1 + this.Numero2,
"-" => this.Numero1 - this.Numero2,
"/" => this.Numero1 / this.Numero2,
"*" => this.Numero1 * this.Numero2,
_ => -1
};
}
public int Numero1 { get; set; }
public int Numero2 { get; set; }
public string Operacao { get; set; }
public int Resultado { get; set; }
public void Imprimir()
{
WriteLine($"{this.Numero1} {this.Operacao} {this.Numero2} = {this.Resultado}");
}
}
}
|
Executando o projeto teremos:
Concluindo temos as seguintes melhorias na sintaxe da instrução
switch:
Aguarde mais artigos sobre as novidades do C# 8.0.
"Porque Deus não nos destinou para a
ira, mas para a aquisição da salvação, por nosso Senhor Jesus Cristo, Que morreu
por nós, para que, quer vigiemos, quer durmamos, vivamos juntamente com ele."
1 Tessalonicenses
5:9,10
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - StreamReader, StringReader e TextReader . Qual a ... - Macoratti
C# - Imprimindo um arquivo texto - Macoratti
C# - Usando OpenFileDialog - Macoratti
C# - Formatando arquivos textos - Macoratti
C# - Convertendo valores para o formato monetário
C# - Lendo e escrevendo em arquivos textos e binários - Macoratti
VB.NET - Conversão entre tipos de variáveis - Macoratti
C# - Localizando Arquivos - Macoratti