2009-10-25 22 views

Odpowiedz

85

Zakładając, że używasz .NET 3.5 lub nowszy (using System.Linq;):

string[] keys = dictionary.Keys.ToArray(); 

W przeciwnym razie trzeba będzie użyć metody CopyTo lub użyć pętli:

string[] keys = new string[dictionary.Keys.Count]; 
dictionary.Keys.CopyTo(keys, 0); 
+1

Korzystanie C++/CLI i .NET 3.5 uzyskać to, kiedy próbuję: 'error C2039: 'ToArray' nie jest członkiem„Systemu: : Collections :: Generic :: Dictionary :: KeyCollection'' –

+5

@JonCage, 'ToArray' jest metodą rozszerzenia zdefiniowaną w' System.Linq.Enumerable'; o ile mi wiadomo, C++/CLI nie obsługuje metody rozszerzenia, więc musisz nazwać ją normalną metodą statyczną: 'System :: Linq :: Enumerable :: ToArray (dictionary.Keys)' –

+2

Wiem, że to jest super stary, ale dla tych z nas, którzy tworzą program SharePoint, dziękujemy za uwzględnienie starszego rozwiązania ramowego. – iambriansreed

0

Niestety, Nie mam VS w pobliżu, aby to sprawdzić, ale myślę, że coś takiego może zadziałać:

var keysCol = dictionary.Keys; 
var keysList = new List<???>(keysCol); 
string[] keys = keysList.ToArray(); 

wher e ??? to twój kluczowy typ.

2

Skorzystaj z tego, jeśli klucze nie są typu ciąg. Wymaga LINQ.

string[] keys = dictionary.Keys.Select(x => x.ToString()).ToArray(); 
+1

To zwraca 'IEnumerable ', a nie 'string []' –

+0

Z OP również wynika, że ​​klucze są typu 'string' (chociaż pierwotnie wystąpił problem z formatowaniem, który uniemożliwił jego wyświetlenie). –

+0

Jak mówi moja odpowiedź, użyj go, jeśli twój klucz nie jest typu string i nadal chcesz ciąg ... –

4

Z dictionary.Keys.CopyTo (keys, 0);

Jeśli nie potrzebujesz tablicę (które zazwyczaj nie trzeba) można po prostu iterację kluczy.

+0

+1 dla "... iteracji kluczy"; to na ogół wydaje się lepsze niż ich kopiowanie. –

0

Albo przydatne rozszerzenie generic ...

public static T2[] ToValueArray<T1, T2>(this Dictionary<T1, T2> value) 
    { 
     var values = new T2[value.Values.Count]; 
     value.Values.CopyTo(values, 0); 

     return values; 
    } 
Powiązane problemy