Novidades do .NET 9: o tipo genérico ReadOnlySet<T>
O .NET 9 introduz um novo tipo visando a manipulações de Collections do tipo Set em um modo somente leitura: trata-se do tipo ReadOnlySet<T> (namespace System.Collections.ObjectModel). Essa estrutura dispõe de um construtor que recebe instâncias baseadas em ISet<T>, evitando assim que modificações sejam realizadas no objeto original.
A listagem a seguir demonstra como seria uma implementação com ReadOnlySet<T>:
var campeoesMundiais = new HashSet<string>()
{
"...",
"Brasil",
"Italia",
"Alemanha",
"Argentina",
"Uruguai",
"Franca",
"Inglaterra",
"Espanha",
"????"
};
var campeoesMundiaisReadOnly = new ReadOnlySet<string>(campeoesMundiais);
// Testes com as variáveis campeoesMundiais e campeoesMundiaisReadOnly...
Podemos observar no Visual Studio 2022 que operações que produzem modificações em uma estrutura como um HashSet<T>, como no caso do método Remove, não estão disponíveis para implementações baseadas em ReadOnlySet<T>:
Na próxima listagem temos um exemplo completo de uso de ReadOnlySet<T>:
O resultado da execução deste código está na imagem seguinte:
A execução das instruções que vão da linha 10 até a linha 31 mostram que o mesmo conteúdo da variável campeoesMundiais (tipo HashSet<string>) estará associado à variável campeoesMundiaisReadOnly (tipo ReadOnlySet<string>):
Alterações nas linhas 35 e 36 (2 chamadas ao método Remove) em campeoesMundiais também refletirão em campeoesMundiaisReadOnly, muito embora esta última referência permaneça como somente leitura:
Esta aplicação de exemplo foi disponibilizada no GitHub:
https://github.com/renatogroffe/DotNet9-ConsoleApp-ReadOnlySet
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!