2009-09-16 19 views
17

He buscado esto en la red pero estoy pidiendo esto para asegurarse de que no he perdido algo. ¿Hay una función incorporada para convertir HashSets en Listas en C#? Necesito evitar la duplicidad de elementos pero necesito devolver una lista.C# Hashset conversión a listas

Respuesta

48

Así es como yo lo haría:

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

HashSet es, por definición, no contiene duplicados. Entonces no hay necesidad de Distinct.

+0

En relación con esto, si tengo una lista ordenada y hago orderedList.Distinct () .ToList() podría decirme si conserva el orden en la lista ordenada? Sirve para mi propósito si se asegura de que siempre conserve la primera ocurrencia del elemento duplicado y se deshaga de la ocurrencia posterior. (Tengo la lista ordenada por relevancia ... necesito que se conserve la más relevante) – atlantis

+0

@Ngu there no tiene sentido usar Distinct() en un HashSet, ya que de todos modos no habrá duplicados. –

+0

Sí, el pedido se retiene. – Graviton

5

Existe el método de extensión Linq ToList<T>() que hará eso (Se define en IEnumerable<T> que se implementa por HashSet<T>).

Sólo asegúrese de que está using System.Linq;

Como es obvio conscientes del HashSet le asegura no hay duplicados, y esta función le permitirá regresar como un IList<T>.

12

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

Personalmente preferiría que llaman ToList es que significa que no es necesario reformular el tipo de la lista.

Contrariamente a mis pensamientos anteriores, en ambos sentidos permiten covarianza a expresarse fácilmente en C# 4:

HashSet<Banana> bananas = new HashSet<Banana>();   
    List<Fruit> fruit1 = bananas.ToList<Fruit>(); 
    List<Fruit> fruit2 = new List<Fruit>(bananas); 
5
List<ListItemType> = new List<ListItemType>(hashSetCollection);