Olá, Eduardo. Como vai?
Excelente código! Sua implementação está perfeita e toca em um dos conceitos mais importantes quando falamos de coleções: a diferença entre conjuntos de elementos únicos e coleções ordenadas.
Você utilizou o HashSet<int> de forma brilhante para barrar as duplicatas (os valores 150 e 200 adicionados repetidamente foram ignorados de forma automática e transparente). Logo depois, fez a conversão correta para List<int> para conseguir aplicar o método .Sort(), já que os HashSets nativos não possuem um índice definido e não garantem nenhuma ordenação.
Para enriquecer o seu projeto e expandir os seus conhecimentos sobre manipulação de conjuntos no C#, separei duas abordagens alternativas que são amplamente utilizadas no mercado para atingir esse mesmo resultado:
1. A Solução Direta com SortedSet<T>
Se o objetivo do seu projeto for manter elementos únicos e garantir que eles fiquem sempre ordenados de forma automática (sem que você precise criar uma nova lista e chamar o método .Sort() manualmente), o .NET possui uma coleção nativa perfeita para isso chamada SortedSet<T>.
Toda vez que você adiciona um item nele, ele faz a validação de duplicidade e o insere na posição correta usando uma estrutura de árvore binária nos bastidores:
// Cria o conjunto que barra duplicados e ordena automaticamente
var scoresSorted = new SortedSet<int> { 150, 90, 200, 120, 150, 80, 180, 200 };
Console.WriteLine("Scores ordenados automaticamente pelo SortedSet:");
foreach (int score in scoresSorted)
{
Console.WriteLine(score); // Já sairá em ordem crescente
}
2. Resolvendo com LINQ em uma Linha
Como você já usou o LINQ em outros exercícios, vale destacar que ele simplifica drasticamente esse fluxo de conversão e ordenação. Você pode manter o seu HashSet original intocado e gerar a exibição ordenada diretamente usando o método .OrderBy():
using System.Linq;
// Ordena os elementos do seu HashSet original para a leitura
foreach (int score in scores.OrderBy(x => x))
{
Console.WriteLine(score);
}
Parabéns por mais essa entrega impecável! Você está construindo uma base extremamente sólida sobre o funcionamento interno das estruturas de dados no C#.
Espero que possa ter lhe ajudado!