2009-10-21 10 views

cevap

35

HashSet<T>.CopyTo yöntemini kullanın. Bu yöntem, öğeleri HashSet<T>'dan bir diziye kopyalar.

Yani verilen adında bir HashSet<String>stringSet böyle bir şey yapacağını:

String[] stringArray = new String[stringSet.Count]; 
stringSet.CopyTo(stringArray); 
+8

HashSet.ToArray() daha basit –

+0

ToArray var mı? – Konstantin

+6

@ Konstantin HashSet 'un bir .ToArray() yöntemine sahip olduğunu göremiyorum ama bu dahili. Ancak, dahili olarak .CopyTo() kullanan LINQ's .ToArray() uzantı yöntemini kullanabilirsiniz. Çünkü HashSet , ICollection uygular ve LINQ'nin .ToArray() uygulaması, ICollection 'ler için özel bir duruma sahiptir. – flai

0

herhangi ICollection<T> uygulanması için olduğu gibi

function T[] ToArray<T>(ICollection<T> collection) 
{ 
    T[] result = new T[collection.Count]; 
    int i = 0; 
    foreach(T val in collection) 
    { 
     result[i++] = val; 
    } 
} 

sanırım.

Aslında HashSet<T> sınıfını kullanmak System.Core başvurmalıdır olarak aslında siz de kullanabilecek: Eğer System.Collections.Generic.HashSet kastediyorsan

T[] myArray = System.Linq.Enumerable.ToArray(hashSet); 
+0

CopyTo'yu kullanırken neden çok çalışıyorsunuz? – Vitaliy

+1

Daha genel olduğundan (herhangi bir ICollection için geçerlidir) ve CopyTo diziyi manuel olarak ayırmanızı gerektirir. –

17

, bu tür sert o sınıf yapar beri var Çerçeve 3.5 öncesinde mevcut değil.

Eğer 3.5 üzerinde iseniz, HashSet IEnumerable uyguladığı için ToArray'ı kullanın, örn.

using System.Linq; 
... 
HashSet<int> hs = ... 
int[] entries = hs.ToArray(); 

Kendi HashSet sınıfınız varsa, söylemek zor.

+0

Bu sorunun yanıtına bakın: http://stackoverflow.com/questions/687034/using-hashset-in-c-2-0-compatible-with-3-5 –

+1

Bu cevaptan alıntı: "HashSet'i kullanabilirsiniz Şimdi bir 2.0 uygulamada - sadece System.Core.dll referans ... Not: Bu, .NET 3.5 framework'ü yüklemenizi gerektirir ". IMO, Framework 3.5'in bazı bölümlerini kullanırsanız, 3.5 ve 2.0 değilsiniz. Sistem DLL'lerinin çoğu çerçeve 3.5 üzerinde bile 2.0.0.0 sürümü olarak işaretlenmiştir. – erikkallen