web-dev-qa-db-fra.com

Conversion HashSet en liste

J'ai regardé ça sur le net mais je demande ceci pour m'assurer que je n'ai pas raté quelque chose. Existe-t-il une fonction intégrée pour convertir les HashSets en listes en C #? Je dois éviter la duplicité des éléments mais je dois retourner une liste.

25
atlantis

Voici comment je le ferais:

   using System.Linq;
   HashSet<int> hset = new HashSet<int>();
   hset.Add(10);
   List<int> hList= hset.ToList();

HashSet ne contient par définition aucun doublon. Il n'y a donc pas besoin de Distinct.

64
Graviton

Deux options équivalentes:

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);

Personnellement, je préfère appeler ToList, cela signifie que vous n'avez pas besoin de reformuler le type de la liste.

Contrairement à mes pensées précédentes, les deux façons permettent d'exprimer facilement la covariance en C # 4:

    HashSet<Banana> bananas = new HashSet<Banana>();        
    List<Fruit> fruit1 = bananas.ToList<Fruit>();
    List<Fruit> fruit2 = new List<Fruit>(bananas);
14
Jon Skeet

Il y a la méthode d'extension Linq ToList<T>() qui fera cela (elle est définie sur IEnumerable<T> qui est implémenté par HashSet<T>).

Assurez-vous simplement que vous êtes using System.Linq;

Comme vous le savez évidemment, le HashSet vous assurera de ne pas avoir de doublons, et cette fonction vous permettra de le renvoyer en tant que IList<T>.

6
Simon Fox
List<ListItemType> = new List<ListItemType>(hashSetCollection);
5
user3083619