Novidades do C# 13: params collections

Renato Groffe
3 min readMay 23, 2024

--

Este artigo inicia aqui no blog uma série abordando as novidades do C# 13. Nova versão da linguagem, o release oficial do C# 13 está previsto para Novembro/2024 e deve acontecer em conjunto com o lançamento do .NET 9.

Uma das novas capacidades trazidas pelo C# 13 são as param collections: o uso do modificador params não está mais restrito apenas a declarações de arrays, podendo agora também ser empregado com coleções de qualquer tipo. Isso inclui construções baseadas em estruturas como:

  • System.ReadOnlySpan<T>
  • System.Collections.Generic.IEnumerable<T>
  • System.Collections.Generic.IReadOnlyCollection<T>
  • System.Collections.Generic.IReadOnlyList<T>
  • System.Collections.Generic.ICollection<T>
  • System.Collections.Generic.IList<T>

Na próxima listagem podemos observar a implementação e utilização do método ProcessWords (linhas 19 a 28) em Program.cs:

  • O parâmetro words foi marcado com o modificador params, recebendo uma instância de IEnumerable<string>. Este método exibirá então o tipo associado a words, seu número de elementos e a concatenação das strings correspondentes (uma possível frase);
  • A primeira chamada a ProcessWords se vale da sintaxe já suportada anteriormente pelo modificador params (linha 9), com os diversos itens que compõem um array separados por vírgula e representados como se fossem parâmetros convencionais (não seguindo aqui a forma clássica de se declarar um array, com seus elementos entre colchetes).
  • Na segunda chamada a ProcessWords (linha 11) temos um exemplo de uso de uma Collection expression, um tipo de construção introduzido a partir do C# 12;
  • Já a terceira chamada a ProcessWords (linha 14) envolve a utilização de um array de strings (variável group3), inicializado por meio de uma Collection expression;
  • Por fim, a quarta chamada ao método ProcessWords (linha 17) emprega um List<string>, que também usou uma Collection expression para inicializar seus valores.

O resultado da execução deste exemplo está na imagem seguinte:

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

Uma das motivações que contribuíram para a implementação desta nova capacidade está em uma tendência de maior utilização de outras construções no lugar de arrays, como Lists e outros tipos de Collections (até mesmo aquelas baseadas em Span). Isto também abre caminho para que Desenvolvedores de bibliotecas e projetos open source na plataforma .NET otimizem suas implementações, evitando a criação de múltiplas sobrecargas de um mesmo método a partir do uso de params collections.

O exemplo apresentado neste artigo foi disponibilizado no GitHub:

https://github.com/renatogroffe/CSharp13-ConsoleApp-ParamsCollections

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!

Também demonstramos esse exemplo e discutimos novidades do C# 13 em uma live recente no Canal .NET (clique aqui para acessar o vídeo no YouTube):

--

--

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

No responses yet