C# 8 Range Index

No post anterior eu falei um pouco sobre o Visual Studio 2019 Preview, que alias, eu já estou utilizando para trabalhar em alguns projetos.

Juntamente com esta nova versão do Visual Studio, temos também o Preview do .NET Core 3 e do C# 8.

Neste post vamos criar um pequeno projeto Console e mostrar a funcionalidade chamada Range Index!

Antes de iniciarmos, vou criar o projeto exemplo no Visual Studio 2019 e configurar o C# para versão 8, veja abaixo:

Depois de criamos o projeto, vamos configurar o .NET e a versão do C# para 8 beta. Entre em Project/Properties:

Agora que já temos nosso projeto Console, podemos iniciar os testes com o Range Index:

Com este novo recurso do C#, você pode navegar em um array qualquer, utilizando o indexador, mas isto já existe, certo ? Veja o exemplo abaixo:

static void Main(string[] args)
{
   int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

   foreach(int i in num)
   {
      Console.WriteLine(i);
   }
}

A ideia agora é poder navegar dentro desta lista, mas utilizando qualquer ponto inicial ou final, veja o mesmo exemplo, agora com Range Index:

static void Main(string[] args)
{
   int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

   foreach(int i in num[1..5])
   {
      Console.WriteLine(i);
   }
}

Veja que agora estamos navegando entre as posições 1 a 5, que se refere a sequência: 2,3,4,5.

Ok, mas vamos a um exemplo mais interessante, utilizando strings. Você provavelmente já se deparou com problemas do tipo ler uma parte de uma string, começando em uma posição e terminando em outra ? Isto é bem comum em leituras de arquivos TXT.

Lembrando que uma string é um array de char! Vejamos alguns exemplo com strings:

string str = "Exemplo em C# 8";

string palavra = str[^4..^0];
Console.WriteLine(palavra);

string final = str[^4..];
Console.WriteLine(final);

string inicio = str[..7];
Console.WriteLine(inicio);

Vamos entender cada string:

No primeiro exemplo temos: str[^4..^0] – isto indica para iniciar o range 4 caracteres antes do final, até o final ^0, ou seja, retorne as 4 últimas letras da string.

No segundo exemplo temos: str[^4..] – que faz exatamente a mesma coisa do primeiro, pois suprimindo o final do index, indica que será tudo.

No terceiro exemplos temos:  str[..7] – que pega as 7 primeiras letras da string.

Executando o nosso exemplo, temos os seguintes resultados:

C# 8
C# 8
Exemplo

Você pode estar dizendo que isto faz o mesmo que o Substring(), e de fato faz, mas de uma maneira muito mais simples e poderosa!

É isto aí, espero que tenham gostado desta prévia do C# 8 que comecem a testar!!!

Este exemplo também está no meu Git: https://github.com/carloscds/csharpsamples

Abraços e até a próxima,
Carlos dos Santos