2009-10-25 38 views

Respuesta

85

Suponiendo que está utilizando .NET 3.5 o posterior (using System.Linq;):

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

De lo contrario, tendrá que utilizar el método CopyTo, o utilizar un bucle:

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

Usando C++/CLI y .NET 3.5 me sale esto cuando intento: 'error C2039: 'ToArray': no ​​es un miembro de 'Sistema: : Colecciones :: Genérico :: Diccionario :: KeyCollection'' –

+5

@JonCage, 'ToArray' es un método de extensión definido en' System.Linq.Enumerable'; por lo que sé, C++/CLI no es compatible con el método de extensión, por lo que debe llamarlo como un método estático normal: 'System :: Linq :: Enumerable :: ToArray (dictionary.Keys)' –

+2

Sé que esto es Muy viejo, pero para aquellos de nosotros que estamos desarrollando para SharePoint, gracias por incluir la solución de marco anterior. – iambriansreed

0

Por desgracia, No tengo VS cerca para verificar esto, pero creo que algo así podría funcionar:

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

wher e ??? es tu tipo de llave

2

Utilice esto si sus claves no son de tipo cadena. Requiere LINQ.

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

Esto devuelve un 'IEnumerable ', no una 'cadena []' –

+0

Además, está claro desde el OP que las claves son del tipo 'string' (aunque originalmente había un problema de formato que impedía que se mostrara). –

+0

Como dice mi respuesta, úsela si su clave no es de tipo cadena y aún desea una cadena ... –

4

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

Si usted no necesita la matriz (que por lo general no es necesario) sólo puede iterar sobre los Cayos.

+0

+1 para "... iterar sobre las teclas"; eso generalmente parece mejor que copiarlos. –

0

O tal vez una extensión genérica 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; 
    } 
Cuestiones relacionadas