Novidades do C# 8.0: como habilitar, Ranges e Indices

Renato Groffe
4 min readDec 10, 2018

--

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:

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

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

Responses (2)