Novidades do C# 8.0: como habilitar, Ranges e Indices
No dia 04/12/2018 (última terça-feira) aconteceu o Microsoft Connect(); 2018, com transmissões online abordando novidades de tecnologias como .NET, C#, Visual Studio e o Microsoft Azure.
No caso específico do C# 8.0, tivemos a disponibilização de uma versão para testes juntamente com o Preview 1 do Visual Studio 2019 e do .NET Core 3. Maiores informações a respeito da instalação destes releases podem ser encontradas no seguinte post:
Visual Studio 2019 e .NET Core 3: primeiros testes
Este artigo inicia uma série que publicarei cobrindo as principais novidades do C# 8.0. Nesse primeiro momento demonstrarei como habilitar esta versão (ainda Beta) no Visual Studio 2019, bem como o uso de Indices e Ranges na manipulação de arrays (tais funcionalidades também se estendem a construções como strings e Span).
E aproveito este espaço para deixar aqui um convite.
Dia 18/12/2018 (terça-feira) às 21h30 — horário de Brasília — teremos o último hangout do ano de 2018 no Canal .NET. Desta vez receberemos o MVP Angelo Belchior, que fará uma apresentação sobre sobre a biblioteca Polly (solução para a implementação de código resiliente e tratamento de falhas). Vale destacar que a adoção de Polly é uma alternativa eficiente para a implementação de patterns como Retry, Circuit Breaker, Timeout, Bulkhead Isolation, e Fallback.
Para efetuar a sua inscrição acesse a página do evento no Facebook ou então o Meetup. A transmissão acontecerá via YouTube, em um link a ser divulgado em breve.
Criando o projeto para testes
A IDE do Visual Studio 2019 Preview 1 passou por algumas mudanças, sendo que talvez uma das diferenças mais visíveis esteja no processo de criação de novos projetos. Na janela a seguir foi selecionado o template Console App (.NET Core):
Já no próximo formulário deverá ser especificado o nome e o caminho para a criação do projeto:
Habilitando o uso do C# 8.0 no Visual Studio 2019
O exemplo apresentado neste artigo foi implementado a partir do Visual Studio 2019 Preview 1. É importante destacar que releases anteriores não contam com suporte para a versão 8.0 da linguagem C#.
Caso o uso do C# 8.0 não tenha sido previamente habilitado, alertas (destacados em vermelho) aparecerão no Visual Studio 2019 ao tentar se empregar algum 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…:
Em Language version selecionar então C# 8.0 (beta) ou C# latest minor version (latest), a fim de ativar os recursos desta nova versão da linguagem:
Ranges e Indices
Conforme mencionado anteriormente, Ranges e Indices são elementos concebidos com o objetivo de facilitar a manipulação de construções como arrays, strings e representações baseadas em Span.
Considerando o exemplo da listagem a seguir temos:
- Um array com 6 posições contendo strings que se referem a diversas tecnologias;
- A instrução tecnologias[2..5] faz uso de índices para selecionar um range de elementos que vai da segunda posição até a quarta do array tecnologias (o limite da segunda parte do range é exclusivo, logo será considerada a posição imediatamente anterior — neste caso 4).
A seguir está o resultado da execução deste código:
Podemos refatorar este código, declarando uma variável baseada no struct Range (namespace System) que contenha os índices com o intervalo de elementos desejados. É o que demonstra a próxima listagem:
Como resultado teremos:
Indices e Ranges também podem ser empregados na passagem de parâmetros a um método, por exemplo. Na próxima listagem temos casos que retomam os 2 testes anteriores, além de outras possibilidades de uso destes novos recursos:
- Uma expressão como ..5 selecionará o elemento de posição zero (ao se omitir tal valor foi assumido justamente 0 como default) até o quarto elemento do array;
- Já a utilização de ^ permite a seleção até um determinado ponto considerado a partir do término do array. Assim ^1 permite que se retorne até o penúltimo item do array, ao passo que ^2 fará o mesmo com o antepenúltimo elemento.
Ao executar este novo bloco de instruções o resultado será o seguinte: