.NET 9: primeiros testes com o Preview 1 + método CountBy em LINQ
A Microsoft disponibilizou na última terça (13/02/2024) o Preview 1 do .NET 9, o primeiro release para avaliação da nova versão da plataforma .NET (com lançamento previsto até o momento para Novembro/2024). Informações sobre algumas das novidades previstas podem ser encontradas na seguinte postagem do blog oficial do .NET:
Além de um escopo que tradicionalmente cobre questões de performance, segurança e uma maior produtividade na codificação, esse post destaca ainda que outros 2 focos da nova versão da plataforma .NET serão melhorias voltadas à implementação de soluções cloud native e de projetos baseados em Inteligência Artificial.
Já instalei o .NET 9 Preview 1 em um ambiente Windows que uso para testes:
Essa instalação pode ser obtida através do seguinte link:
https://dotnet.microsoft.com/en-us/download/dotnet/9.0
Como sempre faço em meu primeiro artigo sobre uma nova versão da plataforma .NET, recomendo o uso de um arquivo global.json a fim de configurar qual release será adotado como default. Detalhes sobre como fazer isto podem ser encontrados no artigo:
.NET Core: definindo a versão do SDK utilizada pelo comando dotnet new
Em um vídeo recente publicado no Canal .NET discuti com alguns amigos o que podemos esperar do .NET 9, além de demonstrar 2 novas funcionalidades envolvendo a serialização de dados no formato JSON:
- As propriedades IndentCharacter e IndentSize no tipo JsonSerializerOptions;
- Assumindo as opções de serialização default do ASP.NET Core com JsonSerializerOptions.Web.
A gravação está disponível no YouTube e pode ser assistida gratuitamente:
Nas próximas seções abordarei também o suporte do Visual Studio 2022 a esta nova versão da plataforma .NET, bem como uma das novidades que integram LINQ (o método CountBy).
Suporte no Visual Studio 2022
No Visual Studio 2022 versão 17.10.0 Preview 1.0 o Preview 1 do .NET 9 aparecerá como uma das opções disponíveis para a implementação de novos projetos:
O método CountBy em LINQ
Um dos novos Extension Methods disponibilizados para LINQ chama-se CountBy, permitindo que se realize a contagem de elementos por chaves e retornando para isto uma coleção de instâncias do tipo KeyValuePair.
Considerando o tipo Localidade:
E um array baseado nesta classe, em que constarão diversas instâncias representando cidades brasileiras:
var localidades = new Localidade[]
{
new Localidade { NomeCidade = "Belo Horizonte", SiglaEstado = "MG" },
new Localidade { NomeCidade = "Campinas", SiglaEstado = "SP" },
new Localidade { NomeCidade = "Feira de Santana", SiglaEstado = "BA" },
new Localidade { NomeCidade = "Juiz de Fora", SiglaEstado = "MG" },
new Localidade { NomeCidade = "Niterói", SiglaEstado = "RJ" },
new Localidade { NomeCidade = "Ouro Preto", SiglaEstado = "MG" },
new Localidade { NomeCidade = "Porto Alegre", SiglaEstado = "RS" },
new Localidade { NomeCidade = "Ribeirão Preto", SiglaEstado = "SP" },
new Localidade { NomeCidade = "Rio de Janeiro", SiglaEstado = "RJ" },
new Localidade { NomeCidade = "Salvador", SiglaEstado = "BA" },
new Localidade { NomeCidade = "Santos", SiglaEstado = "SP" },
new Localidade { NomeCidade = "São Paulo", SiglaEstado = "SP" },
new Localidade { NomeCidade = "Uberlândia", SiglaEstado = "MG" },
new Localidade { NomeCidade = "Belém", SiglaEstado = "PA" }
};
Podemos gerar uma lista com as contagens de cidades tendo por chaves seus respectivos estados (propriedade SiglaEstado de Localidade), através do uso conjunto dos métodos Select e CountBy:
IEnumerable<KeyValuePair<string, int>> contagemLocalidades =
localidades.Select(estado => estado.SiglaEstado!)
.CountBy(siglaEstado => siglaEstado);
Na listagem seguinte temos o arquivo Program.cs de uma Console Application, com esses trechos de código combinados:
O resultado da execução deste exemplo pode ser observado na próxima listagem:
Este projeto foi disponibilizado no GitHub:
https://github.com/renatogroffe/DotNet9-ConsoleApp-LINQ-CountBy
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!