Novidades do C# 7.1

Renato Groffe
Aug 27, 2017 · 4 min read

O objetivo deste artigo é apresentar as novidades que integram o C# 7.1, assim como demonstrar o procedimento para ativar tais recursos podem a partir do Visual Studio 2017 Update 15.3.


Habilitando o uso do C# 7.1 no Visual Studio 2017

Caso o uso do C# 7.1 não tenha sido previamente habilitado, um alerta aparecerá no Visual Studio 2017 ao se tentar empregar um dos novos recursos:

Para evitar este tipo de problema será necessário alterar as propriedades do projeto em questão. Na seção Build acionar a opção Advanced…:

Aparecerá neste momento a janela Advanced Build Settings, com a opção C# latest major version (default) selecionada:


Método Main assíncrono

Até o C# 7.0 não era possível definir o método Main na classe Program de uma aplicação como assíncrono (muito embora existissem meios para emular tal comportamento). As seguir estão listadas as sobrecargas possíveis antes da versão 7.1:

Já o C# 7.1 permite que esta operação seja declarada como assíncrona, trazendo assim novas possibilidades para a implementação desta função:

A próxima listagem apresenta um exemplo de implementação assíncrona do método Main, com isto acontecendo em uma API REST criada com o ASP.NET Core 2.0:


Inferindo os nomes de propriedades em tuplas

Ao se criar tuplas a partir de objetos pré-existentes o C# 7.0 assumia por convenção os valores Item1, Item2 e assim por diante (de acordo com a quantidade de itens presentes) como identificação das propriedades retornadas. A seguir podemos observar um exemplo deste comportamento:

Uma alternativa a isto seria especificar o nome de cada propriedade no momento da criação das tuplas (para este exemplo foram utilizados Name e FullName):

A capacidade de inferir os nomes de propriedades em tuplas é uma das novidades do C# 7.1. Graças a tal funcionalidade o exemplo abordado nesta seção ficaria da seguinte forma:

O resultado da execução deste trecho de código pode ser observado na próxima imagem:


Pattern Matching com tipos genéricos

Um dos destaques durante o lançamento do C# 7.0 foi o recurso conhecido como Pattern Matching, o qual simplificou o processo de checagem de tipos. Entretanto, essa capacidade não estava disponível para o uso com Generics.

Na listagem a seguir o método ConverterData ilustra esta limitação, com o mesmo possuindo um parâmetro definindo como sendo do tipo object:

Já a próxima listagem traz este código refatorado, demonstrando assim o uso de Pattern Matching com tipos genéricos no método ConvertarData:

Como resultado da execução deste último exemplo temos:


Default expressions

Em versões anteriores da linguagem C# a palavra-chave default podia ser empregada para retornar o valor padrão de um tipo. Tal prática exigia que o tipo em questão fosse informado como parâmetro a este operador, conforme indicado na próxima listagem:

Com o C# 7.1 basta agora apenas especificar o operador default. Instruções deste tipo são chamadas de default expressions, com a sua utilização acontecendo:

  • Em operações envolvendo ternários;
  • Como retorno em funções e expressões lambda;
  • Como valor default em métodos que possuam parâmetros opcionais;
  • Na inicialização de arrays, variáveis e constantes.

A listagem a seguir traz o exemplo desta seção já refatorado, de forma a demonstrar o uso de default expressions:

Ao executar este exemplo aparecerá o seguinte resultado:


Os diversos exemplos de uso do C# 7.1 abordados neste artigo foram também disponibilizados no GitHub:

https://github.com/renatogroffe/Exemplos_CSharp7.1


Renato Groffe

Written by

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade