C# 8.0 — Indíces a Intervalos
Com o anúncio do .NET Core 3.0 (Preview 1) pela Microsoft no Connect(); 2018, a nova versão do C# 8.0 foi oficializada, porém somente funciona com o .NET Core 3.0 (infelizmente).
Entretanto, uma nova funcionalidade interessante foi disponibilizado no C# 8.0 denominada Índices e Intervalos. Com essa funcionalidade, podemos obter determinado range de dados de um Array e até mesmo de strings.
Para esse exemplo, vou utilizar o Visual Studio 2019 Preview que já possui suporte ao .NET Core 3.0 e consequentemente ao C# 8.0.
Caso você prefira utilizar o Visual Studio 2017, certifique-se que seu Visual Studio possua o update 15.9 ou uma versão mais nova instalada, pois somente a partir desse update que o Visual Studio começa a suportar o .NET Core 3.0.
Certifique-se também, possuir o .NET Core 3.0 instalado em sua máquina.
Configurando o C# 8.0
Vamos criar um projeto do tipo Console do .NET Core
Com o projeto criado, clique como botão direito sobre o nome do projeto e selecione Properties
Certifique-se que a versão do .NET Core 3.0 é utilizada
Agora vamos selecionar a versão 8.0 do C#
Pronto, agora com nosso projeto configurado, vamos para a implementação
Utilizando um array de número, temos a declaração [1..3], indicando que devemos obter o range a partir da posição 1 do nosso array, até a 3 posição antes do final.
Executando nosso código, podemos notar que obtemos três valores (0, 5, 10) como resultado, conforme ilustrado abaixo:
Acabamos de ver a simplicidade para trabalhar com essa nova funcionalidade em Arrays, e agora vamos a aplicação em strings
Primeiro definimos um texto e após vamos declarar o filtro [ˆ24..ˆ2] indicando que devemos obter o range começando pela posição 24 antes do final, até a posição 2 antes do final.
Executando nosso código, podemos notar que obtemos quase o texto completo como resultado, conforme ilustrado abaixo:
Em nosso próximo exemplo utilizamos o mesmo texto e definimos nosso filtro como [ˆ14..] indicando que devemos começar obter o range a partir da posição 14 antes do final até o final, pois não foi declarado o índice final.
Executando nosso código de exemplo, podemos notar que somente parte do texto foi obtido, conforme ilustrado abaixo:
No quarto e ultimo exemplo, utilizando ainda o mesmo texto, definimos o filtro [..9] indicando que devemos pegar as 9 primeiras posições do texto.
Em nossos testes, notamos que foi obtido somente o range que foi definido em nosso filtro
Com essa nova funcionalidade, fica mais fácil manipular determinados ranges em um Array ou String, evitando o uso de Foreach nos casos do Array e o uso do Substring() no caso de String
Reforçando um ponto muito importante, quando utilizamos ^, permitimos a seleção de um intervalo até determinado ponto, a partir do término do array
Além disso, podemos abstrair essa implementação em métodos com o intuito de facilitar nosso fluxo de dados e também para reutilização de códigos, conforme implementação abaixo:
Criamos o método GetRange, que retorna um intervalo específico do nosso array, conforme os parâmetros passados. Note que usamos uma varíavel do tipo Index, tanto para índice inicial como para o índice final. Esse novo tipo de varíavel foi adicionado no C# 8.0 e recebe os índices para ser filtrado no array.
Na execução do código, podemos ver que nosso método retornou quatro valores (0, 5, 10, 15), pois nosso método recebeu como parâmetro inicial o elemento 0 e como parâmetro final o elemento 4.
O projeto se encontra em meu GitHub: https://github.com/reniciuspagotto/RangeIndexNetCore3
Referência
https://blogs.msdn.microsoft.com/dotnet/2018/12/05/take-c-8-0-for-a-spin/