2009-10-25 35 views

risposta

85

Supponendo che si sta utilizzando .NET 3.5 o versione successiva (using System.Linq;):

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

In caso contrario, si dovrà utilizzare il metodo CopyTo, o utilizzare un ciclo:

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

con C++/CLI e .net 3.5 ottengo questo quando provo: 'errore C2039: 'ToArray': non è un membro di 'Sistema: : Collezioni :: Generico :: Dizionario :: KeyCollection'' –

+5

@JonCage, 'ToArray' è un metodo di estensione definito in' System.Linq.Enumerable'; per quanto ne so, C++/CLI non supporta il metodo di estensione, quindi devi chiamarlo come un normale metodo statico: 'Sistema :: Linq :: Enumerable :: ToArray (dictionary.Keys)' –

+2

So che questo è super vecchio ma per quelli di noi in via di sviluppo per SharePoint, grazie per aver incluso la vecchia soluzione quadro. – iambriansreed

0

Purtroppo, Non ho VS nelle vicinanze per controllare questo, ma penso che qualcosa del genere potrebbe funzionare:

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

dove e ??? è il tuo tipo di chiave.

2

Utilizzare questo se le chiavi non sono di tipo stringa. Richiede LINQ.

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

Restituisce un 'IEnumerable ', non una 'stringa []' –

+0

Inoltre, è chiaro dall'OP che le chiavi sono di tipo 'stringa' (sebbene originariamente ci fosse un problema di formattazione che impediva la visualizzazione). –

+0

Come dice la mia risposta, usalo se la tua chiave non è di tipo stringa e vuoi ancora una stringa ... –

4

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

Se non è necessario l'array (che di solito non è necessario) si può solo scorrere i tasti.

+0

+1 per "... iterate sulle chiavi"; che in generale sembra meglio che copiarli. –

0

O forse un'estensione generica a portata di mano ...

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; 
    }