C# 8.0 – Conheça suas novas funcionalidades

24 abr

Fala Galera,

Em abril foi lançado a mais nova versão do Visual Studio 2019 e com esta nova versão veio o C# 8.0. Neste artigo estarei mostrando as novas funcionalidades do C# 8.0 e como o C# a cada versão que vem sendo lançado vai ficando mais poderoso.

Quer saber mais sobre o Visual Studio 2019, leia meu artigo que dou um overview sobre esta fantástica IDE clicando aqui

Antes de tudo! Habilite as novas funcionalidades do C# 8 no Visual Studio 2019

Para que você consiga utilizar os novos recursos do C# 8.0, precisamos habilitar dentro do VS 2019. Para isso vá em nas propriedades do seu projeto escolha a opção Build e clique em Advanced

Após selecione na combo, C# 8.0 (Beta) ou unsupported preview of next C# version (preview)

1 – Range e Index

Com o novo C# 8.0 não precisamos mais usar o System.Linq para fazer Slice de Array. Podemos agora com os novos tipos Range e Index selecionar um intervalo de itens dentro de um Array. Veja no exemplo abaixo:

public class RangeSample
{
    static void Main(string[] args)
    {
        string[] techs = new string[] { "ASP.NET", ".NET Core", "SignalR", "Azure", "C#", "Docker", "Visual Studio", "Visual Studio Code" };

         //Retornando elementos dos índices 1 a 5
         foreach (var item in techs[1..5])
            Console.WriteLine($"{item}");
            
         //Retornando elementos da posição 1 até o penúltimo
         foreach (var item in techs[1..^1])
             Console.WriteLine($"{item}");

         //Retornando até o elemento da posição 5
         foreach (var item in techs[..5])
             Console.WriteLine($"{item}");

         //Podemos utilizar o tipo Range e usá-lo como variável
         Range range = 0..6;
            
         foreach (var item in techs[range])
            Console.WriteLine($"{item}");

         //Podemos utilizar também o Tipo Index
         Index last = ^1;
         Console.WriteLine(techs[last]);

    }
}

 

2 – Async ForEach

Foi introduzido um novo tipo chamado de IAsyncEnumerable e com isso podemos tornar nossas coleções assíncronas. Agora também nesta nova versão podemos utilizar o Keyword await em ForEach. Veja no exemplo abaixo:

 public class AsyncForEach
 {
    public struct Data
    {
        public Data(int value1, int value2) => (Value1, Value2) = (value1, value2);
        public int Value1 { get; set; }
        public int Value2 { get; set; }
    }

    public static async IAsyncEnumerable<Data> GetDataAsync()
    {
        var r = new Random();
        for (int i = 0; i < 10; i++)
        {
             await Task.Delay(100);
             yield return new Data(r.Next(100), r.Next(100));
        }
    }

    public static async Task DemoAsync()
    {
        await foreach (var x in AsyncForEach.GetDataAsync())
        {
            Console.WriteLine($"{x.Value1} {x.Value2}");
        }
    }
}

 

3 – Switch Expressions

Nesta nova versão do C# 8.0 temos o Switch Expression que é uma forma poderosa de você fazer cases. Com essa nova Feature do C# podemos criar expressões poderosas para cada situação e deixar mais enxuto nossos Switch Case. Veja no exemplo:

var result = operation switch
{
    "+" => a + b,
    "-" => a - b,
    "/" => a / b,
    "*" => a * b,
    _   => throw new ArgumentException("Operação não encontrada") 
};

Podemos utilizar o Switch Expressions para operações de Tuplas, veja como fica poderoso o Switch

 public enum State
 {
     Open,
     Closed,
 }


 public static State GetState((State, State) state, bool warning = false)
 {
     return state switch
     {
         (State.Open, State.Open) when warning => State.Closed,
         (State.Open, State.Open) => State.Open,
         (State.Open, State.Closed) => State.Closed,
         (State.Closed, State.Closed) => State.Closed,
         (_, _) => State.Closed
     };
 }

 

4 – Property Patterns

Ainda falando em Switch Expressions, temos o Property Patterns no qual visa facilitar a implementação de expressões que utilizam propriedades de um determinado objeto. Veja no exemplo abaixo como podemos utilizar

public class Address
{
   public string State { get; set; }

   public decimal CalcularTaxa(decimal salePrice)
   {
       return this switch
       {
           { State: "RJ" } => salePrice * 0.06M,
           { State: "SP" } => salePrice * 0.75M,
           { State: "MG" } => salePrice * 0.05M,
           _ => 0M
       };
   }
}

 

5 – Declarações Using

Podemos utilizar o Keyword using para informar ao compilador que a variável que está sendo declarada deve ser removida no final do escopo. Isso deixa nosso código muito mais legível pois não precisamos ficar abrindo bloco de using a todo instante. Veja o exemplo

public class UsingSample
{
   public void EscreverNoArquivo(IEnumerable<string> lines)
   {
       using var file = new System.IO.StreamWriter("file.txt");

       foreach (string line in lines)
       {
          file.WriteLine(line);
        }
    }
}

A variável “file” será descartada no final da execução do método “EscreverNoArquivo”

Espero que vocês gostem dessas novas funcionalidades do C# 8.0 e a cada nova versão a linguagem fica mais poderosa e facilitando o nosso dia-dia.

Abs e até a próxima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.