2008-11-30 14 views
15

Mam obiekt typu ICollection<string>. Jaki jest najlepszy sposób przekonwertowania na string[].ICollection <string> na ciąg []

Jak to zrobić w .NET 2?
Jak można to zrobić czyściej w późniejszej wersji C#, być może używając LINQ w C# 3?

Odpowiedz

29

Można użyć następującego fragmentu kodu, aby przekształcić go do zwykłej tablicy:

string[] array = new string[collection.Count]; 
collection.CopyTo(array, 0); 

To powinno załatwić sprawę :)

+0

czy muszę najpierw zainicjować tablicę o właściwym rozmiarze .. cant Właśnie robię to: string [] futures = new string [] {}; FutureFVDictionary.Keys.CopyTo (kontrakty terminowe, 0); ; – leora

+1

Tablica musi najpierw zostać zainicjalizowana do prawidłowego rozmiaru - w przeciwnym razie funkcja CopyTo zakończy się niepowodzeniem z wyjątkiem ArgumentException. – AdrianoKF

+0

z listą (Mycoll) .ToArray() nie musisz się martwić o rozmiar. – gimel

5

W (trywialne) przypadku ICollection<String>, wykorzystać ToArray:

String[] GetArray(ICollection<String> mycoll) 
{ 
    return mycoll.ToArray<String>(); 
} 

EDIT: z .NET 2.0, można zwrócić tablicę z dodatkowym List<String>:

String[] GetArray(ICollection<String> mycoll) 
{ 
    List<String> result = new List<String>(mycoll); 
    return result.ToArray(); 
} 
+0

Kompilator może wywnioskować argument typu, więc mycoll.ToArray() będzie w porządku, bez potrzeby używania części . –

+0

Metoda ta używa metody kopiowania tablicowego, więc bezpośrednie kopiowanie tablicy byłoby lepszym rozwiązaniem niż tworzenie listy, która jest innym obiektem. –

+1

Lista (Mycoll) .ToArray() zawiera szczegóły dotyczące tworzenia i kopiowania tablic. – gimel

8

Jeśli używasz C# 3.0 i .NET Framework 3.5, powinieneś być w stanie to zrobić:

ICollection<string> col = new List<string>() { "a","b"}; 
string[] colArr = col.ToArray(); 

oczywiście, trzeba mieć "za pomocą System.Linq;" na górze pliku

+0

Również lista ma metodę ToArray od .NET 2.0, więc jeśli używasz Listy , nie potrzebujesz System.Linq –

+4

Zapytał o ICollection CVertex

+1

To jest najlepsza odpowiedź w mojej opinii – reggaeguitar

Powiązane problemy