Pergunta
Eu olhei isso na net, mas eu estou pedindo isso para ter certeza que eu não ter perdido alguma coisa. Existe um built-in função para converter HashSets a listas em C #? Eu preciso evitar a duplicidade de elementos, mas eu preciso para retornar uma lista.
Solução
Aqui está como eu faria isso:
using System.Linq;
HashSet<int> hset = new HashSet<int>();
hset.Add(10);
List<int> hList= hset.ToList();
HashSet é, por definição, não contendo duplicatas. Portanto, não há necessidade de Distinct
.
Outras dicas
Duas opções equivalentes:
HashSet<string> stringSet = new HashSet<string> { "a", "b", "c" };
// LINQ's ToList extension method
List<string> stringList1 = stringSet.ToList();
// Or just a constructor
List<string> stringList2 = new List<string>(stringSet);
Pessoalmente eu prefiro chamar ToList
é isso significa que você não precisa reafirmar o tipo de lista.
Ao contrário do que os meus pensamentos anteriores, em ambos os sentidos permitir covariância para ser facilmente expresso em C # 4:
HashSet<Banana> bananas = new HashSet<Banana>();
List<Fruit> fruit1 = bananas.ToList<Fruit>();
List<Fruit> fruit2 = new List<Fruit>(bananas);
Não é o Linq método de extensão ToList<T>()
que vai fazer isso (Ela é definida em IEnumerable<T>
que é implementado pela HashSet<T>
).
Apenas certifique-se que você está using System.Linq;
Como você está obviamente consciente do HashSet
vai garantir que você não têm duplicatas, e esta função permitirá que você devolvê-lo como um IList<T>
.
List<ListItemType> = new List<ListItemType>(hashSetCollection);