Novidades do C# 12: Collection expressions

Renato Groffe
3 min readSep 30, 2023

--

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:

Clique nesta imagem para visualizar com uma melhor resolução

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/

--

--

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