.NET

8 nov, 2023

Novidades do .NET 8: coleções imutáveis com FrozenSet

Publicidade

Em um artigo anterior abordei o uso de instâncias baseadas no tipo FrozenDictionary, uma nova alternativa que permite a criação de estruturas do tipo chave-valor imutáveis:

Novidades do .NET 8: estruturas chave-valor imutáveis com FrozenDictionary

Também integrando o namespace System.Collections.Frozen, temos ainda a possibilidade de criação de coleções baseadas no tipo FrozenSet. Além da questão da imutabilidade ao se trabalhar com sets/conjuntos, esta nova classe ainda é otimizada para uma maior performance em operações de leitura (como também acontece com FrozenDictionary).

Na listagem seguinte podemos observar a geração de um FrozenSet, por meio de uma chamada ao método ToFrozenSet (linha 20) e tomando por base uma instância da classe HashSet (este mesmo procedimento seria válido com um objeto do tipo SortedSet):

using System.Collections.Frozen;
using System.Runtime.InteropServices;
using System.Text.Json;

Console.WriteLine("***** Testes com .NET 8 | Colecoes imutaveis com FrozenSet  *****");
Console.WriteLine($"Versao do .NET em uso: {RuntimeInformation
    .FrameworkDescription} - Ambiente: {Environment.MachineName} - Kernel: {Environment
    .OSVersion.VersionString}");

var campeoesMundiais = new HashSet<string>()
{
    "Brasil",
    "Italia",
    "Alemanha",
    "Argentina",
    "Uruguai",
    "Franca",
    "Inglaterra",
    "Espanha"
}.ToFrozenSet();

Console.WriteLine();
Console.WriteLine($"Quantidades de paises que ja venceram Copas: {campeoesMundiais.Count}");

Console.WriteLine();
Console.WriteLine("JSON com os campeoes da Copa do Mundo: ");
Console.WriteLine(JsonSerializer.Serialize(campeoesMundiais,
    new JsonSerializerOptions() { WriteIndented = true }));

.NET 8

Ao tentar remover um valor existente (invocação do método Remove) ocorrerá um erro, como indicado na imagem seguinte (operações que produzem modificações na coleção não são possíveis com um FrozenSet):

LEIA TAMBÉM: .NET 7 + Minimal APIs: versionando APIs REST de forma descomplicada

O resultado da execução desta Console Application a partir do Visual Studio 2022 pode ser observado na próxima imagem:

LEIA TAMBÉM: .NET MAUI – Menu de navegação Flyout

Este exemplo foi disponibilizado como um repositório do GitHub:

https://github.com/renatogroffe/DotNet8-ConsoleApp-FrozenSet

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!

Referências

.NET 8 – Guia de Referência: artigos, dicas, vídeos e exemplos de utilização

What’s new in .NET 8 | Microsoft Learn

.NET Blog