2010-07-05 12 views

cevap

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

Veya isterseniz, tür çıkarımı işlemek için kendi basit uzantı yöntemini çalabilirsiniz.

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

Bu soruyu ve cevabı bana mantıklı değildir: O zaman açıkça HashSet<T> ait T belirtmek gerekmez. MSDN'ye göre, bir HashSet yinelenen öğeler içeremez ve değerler olmadan bir Sözlük koleksiyonu olarak düşünülmelidir. Tüm değerleri bir Sözlük'ten almak ve onları bir HashSet'e atamak mantıklı değil. –

+0

Ne yazık ki bir KeyCollection nesnesi, ne kadar istediğime rağmen HashSet nesnesiyle aynı değil. – Paul

+0

Bu sorunun 5 yaşında olduğunu aklınızda bulundurun; @ChristopherPainter ile aynı fikirdeyim. Amaç ne? Teklik söz konusu olduğunda (bu sorunun cevabı değil de) çok daha anlamlı olan şey ise: “yeni HashSet (myDictionary.Keys)”. – Heliac

5

new HashSet<Value>(YourDict.Values);