2010-07-05 33 views

Trả lời

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

Hoặc, nếu bạn thích, bạn có thể gõ phương pháp mở rộng đơn giản của riêng bạn để xử lý loại hội thảo. Sau đó, bạn sẽ không cần phải chỉ định rõ ràng các T của 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

Câu hỏi này và câu trả lời không có ý nghĩa đối với tôi. Theo MSDN, một HashSet không thể chứa các phần tử trùng lặp và nên được coi là một bộ sưu tập từ điển không có giá trị. Nó không có ý nghĩa để lấy tất cả các giá trị từ một từ điển và gán chúng cho một HashSet cho tôi. –

+0

Thật không may, một đối tượng KeyCollection không giống như một đối tượng HashSet, mặc dù tôi ước gì nó là như vậy. – Paul

+0

Lưu ý câu hỏi này là 5 tuổi; Tôi đồng ý với @ChristopherPainter. Vấn đề ở đây là gì? Điều gì sẽ làm cho ý nghĩa hơn nhiều như xa như là duy nhất là có liên quan (mặc dù không phải là câu trả lời cho câu hỏi cụ thể này) là: 'mới HashSet (myDictionary.Keys)'. – Heliac

5

new HashSet<Value>(YourDict.Values);

Các vấn đề liên quan