2010-07-05 15 views

risposta

13
var yourSet = new HashSet<TValue>(yourDictionary.Values); 

O, se si preferisce, si può battere il proprio metodo semplice estensione per gestire il tipo di inferenza. Allora non sarà necessario specificare esplicitamente il T del HashSet<T>:

var yourSet = yourDictionary.Values.ToHashSet(); 

// ... 

public static class EnumerableExtensions 
{ 
    public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source) 
    { 
     return source.ToHashSet<T>(null); 
    } 

    public static HashSet<T> ToHashSet<T>(
     this IEnumerable<T> source, IEqualityComparer<T> comparer) 
    { 
     if (source == null) throw new ArgumentNullException("source"); 

     return new HashSet<T>(source, comparer); 
    } 
} 
+3

Questa domanda e risposta non ha senso per me. Secondo MSDN, un HashSet non può contenere elementi duplicati e dovrebbe essere considerato come una raccolta del dizionario senza valori. Non ha senso prendere tutti i valori da un Dizionario e assegnarli a un HashSet. –

+0

Sfortunatamente, un oggetto KeyCollection non è uguale a un oggetto HashSet, nonostante quanto vorrei che fosse così. – Paul

+0

Tenendo presente che questa domanda ha 5 anni; Sono d'accordo con @ChristopherPainter. Qual e il punto? Cosa avrebbe molto più senso per quanto riguarda l'unicità (anche se non è la risposta a questa particolare domanda): 'nuovo HashSet (myDictionary.Keys)'. – Heliac

5

new HashSet<Value>(YourDict.Values);