A Microsoft revelou novos recursos disponíveis na prévia do C# 15, a versão que virá com o .NET 11. A atualização inclui tipos união, hierarquias fechadas e uma prévia do modelo atualizado para lidar com código não seguro, além de mudanças menores destinadas a reduzir o código procedural repetitivo no uso diário.
Argumentos dentro de expressões de coleção
As expressões de coleção em C# podem converter valores em vários tipos de coleções, mas anteriormente não permitiam passar argumentos ao construtor principal ou ao método de criação. O C# 15 adiciona um novo elemento na forma de with(...), colocado no início da expressão, para passar esses argumentos.
Isso permite, por exemplo, criar uma lista especificando a capacidade diretamente dentro da expressão, ou criar um HashSet passando StringComparer.OrdinalIgnoreCase, em vez de separar a criação da adição dos elementos. A Microsoft afirma que esse recurso abre caminho para a construção da sintaxe das futuras expressões de dicionário, que provavelmente precisarão especificar o comparador usado para as chaves.
Acesso a elementos por meio de índices de extensão
Depois que o C# 14 adicionou membros de extensão para propriedades e operadores, além de métodos, o C# 15 amplia esse modelo para incluir índices de extensão. Assim, é possível acessar um elemento de um objeto receptor como se o índice já estivesse definido em seu tipo.
No exemplo apresentado pela Microsoft, acessar um elemento em IEnumerable<int> exigia um método auxiliar como ElementAtIndex. A nova sintaxe permite usar numbers[2] por meio de um índice de extensão associado ao receptor. O blog explica que os índices não podem ser estáticos; portanto, o contêiner da extensão precisa incluir um receptor nomeado.
Rótulos para loops break e continue
O C# 15 permite nomear loops de iteração e direcionar break ou continue diretamente a eles. Isso é útil em loops aninhados, nos quais sair do loop externo normalmente exigia uma variável booleana, o uso de goto ou a transferência da lógica para uma função separada.
Na prática, o rótulo torna explícito o destino da saída no código e elimina a necessidade de uma variável para acompanhar se o elemento desejado foi encontrado. O exemplo apresenta um loop chamado scan, do qual é possível sair diretamente usando break scan.
O que muda para os desenvolvedores?
Esses recursos não alteram o modelo de execução do .NET tanto quanto reorganizam a sintaxe do código e reduzem alguns padrões repetitivos. Seu valor se destaca especialmente em projetos que usam expressões de coleção, trabalham com loops aninhados ou precisam de interfaces de acesso mais concisas para tipos extensíveis.
Contudo, os recursos ainda estão em prévia e, portanto, ainda não representam uma interface final estável. A Microsoft convida os desenvolvedores a baixar o .NET 11 e testar o C# 15 em seus aplicativos, consultando a referência completa sobre as novidades e participando das discussões em andamento no projeto csharplang. A fonte não especifica, neste material, uma data final para transformar os recursos em uma versão estável.