Hoje vou abordar o novo recurso Pattern Matching introduzido na versão 7.0 da linguagem C#. |
O pattern matching pode ser aplicado em instruções switch de maneira que :
Sua aplicação torna-se particularmente muito útil quando o número de condições de teste aumenta e o uso do padrão Is se torna difícil de manter.
Anteriormente instrução switch suportava apenas um padrão constante com tipos e cadeias de valores limitados, mas agora também podemos usar os padrões Type e Var.
Vejamos um exemplo:
No código abaixo temo :
public class Forma
{}
public class Triangulo : Forma
{
public int Largura { get; set; }
public int Altura { get; set; }
public int Base { get; set; }
public Triangulo(int _largura, int _altura, int _base)
{
this.Largura = _largura;
this.Altura = _altura;
this.Base = _base;
}
public void Perimetro()
{
Console.WriteLine($"O perímetro do triângulo é {Largura + Altura + Base}");
}
}
public class Retangulo : Forma
{
public int Largura { get; set; }
public int Altura { get; set; }
public Retangulo(int largura, int altura)
{
this.Largura = largura;
this.Altura = altura;
}
public void Area()
{
Console.WriteLine($"A área do retângulo é {Largura * Altura}");
}
}
|
No código abaixo vamos criar um array de formas contendo um triângulo e dois retângulos e a seguir vamos usar o operador switch e o operador Is aplicando o pattern matching:
class Program
{
static void Main(string[] args)
{
Forma[] formas = { new Triangulo(5, 6, 5), new Retangulo(6, 3), new Retangulo(11,7) };
foreach (var item in formas)
{
switch (item)
{
case null:
Console.WriteLine("Item é nulo");
break;
case Triangulo t:
t.Perimetro();
break;
case Retangulo r when r.Largura > 0:
r.Area();
break;
case Retangulo r:
r.Area();
break;
}
}
Console.ReadLine();
}
}
|
Abaixo temos o resultado da execução deste código:
Vemos que o pattern matching adiciona mais poder tanto aos operadores switch e is.
No caso da instrução switch agora podemos comparar o tipo de um objeto dentro de um bloco switch.
Assim, agora não é mais necessário realizar o cast do objeto dentro do condicional. Este cenário também nos permite uma verificação mais detalhada, onde podemos fazer verificações adicionais, note que no segundo case, verificamos se o objeto é um retângulo, e checamos em seguida se sua largura é maior que zero.
Nota: Agora fique atento para fato de que a ordem dos case é muito importante.
Observe que podemos também usar constantes, como no primeiro case onde foi usado o null, para evitar exceções de null reference nos cases seguintes.
Podemos concluir dizendo que o processo de verificação de tipo e o cast de objetos ficou mais simples. Portanto se você esta usando o C# 7.0 não hesite em utilizar este recurso no seu código.
Pegue o projeto completo aqui : C7_PatternMatching2.zip
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Float, Double e Decimal. Afinal qual devo usar - Macoratti
C# - Os doze trabalho de Hércules - 12 Desafios ... - Macoratti.net