Novidades do C# 12: Collection expressions
As novas funcionalidades que integram o C# 12 também incluem melhorias na declaração de coleções. Uma nova sintaxe chamada collection expressions permite simplicar a forma como inicializamos arrays, Spans e Lists.
Tomando um array baseado em int como exemplo:
int[] arrayCopasBrasil = new int[] { 1958, 1962, 1970, 1994, 2002 };
Podemos simplificar esta declaração, eliminando o uso de new int[] e especificando os diferentes valores entre colchetes ([ e ]):
int[] arrayCopasBrasil = [1958, 1962, 1970, 1994, 2002];
Esta mesma sintaxe pode ser utilizada na definição de um Span:
Span<string> spanEstadosBrasil = new string[] { "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO" };
Em que novamente foram usados colchetes:
Span<string> spanEstadosBrasil = ["AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO"];
E também ao definir um ReadOnlySpan:
ReadOnlySpan<string> readOnlySpancontinentes = [ "Africa", "America do Norte", "America do Sul", "Antartida", "Asia", "Europa", "Oceania" ];
Arrays com mais de uma dimensão também podem se beneficiar desta nova sintaxe. Um array bidimensional como o seguinte:
int[][] array2DCopasPorDecada = { new int[] { 2002, 2006, 2010 }, new int[] { 2014, 2018 }, new int[] { 2022, 2026, 2030 } };
Pode ser declarado utilizando apenas colchetes:
int[][] array2DCopasPorDecada = [[2002, 2006, 2010], [2014, 2018], [2022, 2026, 2030]];
Uma variação deste último exemplo seria um array bidimensional gerado a partir de 2 arrays de uma única dimensão. Considerando o exemplo a seguir:
int[] arrayCopasBrasil = new int[] { 1958, 1962, 1970, 1994, 2002 };
int[] arrayCopasUruguai = new int[] { 1930, 1950 };
int[][] array2DCopasUruguaiBrasil = new int[][] { arrayCopasUruguai, arrayCopasBrasil };
Este código também pode ser refatorado para uma sintaxe baseada apenas em colchetes:
int[] arrayCopasBrasil = [1958, 1962, 1970, 1994, 2002];
int[] arrayCopasUruguai = [1930, 1950];
int[][] array2DCopasUruguaiBrasil = [arrayCopasUruguai, arrayCopasBrasil];
Temos também agora a possibilidade de uso de um operador chamado spread, formado por 2 pontos seguidos (..). Esta nova alternativa permite incorporar os valores de arrays pré-existentes como posições de um novo array. Utilizando como exemplo a geração de um array via método Concat:
int[] arraySingleCopasUruguaiBrasil = arrayCopasUruguai.Concat(arrayCopasBrasil).ToArray();
O uso do operador spread pode ser combinado a colchetes, resultando na seguinte sintaxe:
int[] arraySingleCopasUruguaiBrasil = [..arrayCopasUruguai, ..arrayCopasBrasil];
A inicialização de um List como o do exemplo seguinte:
List<string> listRegioesBrasil = new List<string> { "Norte", "Nordeste", "Centro-Oeste", "Sudeste", "Sul" };
Também pode ser feita empregando apenas colchetes:
List<string> listRegioesBrasil = [ "Norte", "Nordeste", "Centro-Oeste", "Sudeste", "Sul" ];
A próxima listagem combina todos esses exemplos com collection expressions:
O resultado da execução deste código está na imagem seguinte:
Esse exemplo foi disponibilizado no GitHub:
https://github.com/renatogroffe/CSharp12-CollectionExpressions
Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!
E concluo este artigo com um convite…
Acompanhe neste novo evento ONLINE e GRATUITO no Canal .NET dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 7, C#, ASP.NET Core e Azure Functions. Ao longo da apresentação será abordado o uso de diferentes frameworks, serviços na nuvem, mensageria e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.
Teremos ainda novidades do .NET 8 e C# 12 demonstradas através de exemplos práticos!
Quando: 16/10/2023 (segunda) a partir das 21:00 — horário de Brasília
Faça sua inscrição em:
https://www.meetup.com/dotnet-sao-paulo/events/295621042/