2009-10-25 7 views

Répondre

85

En supposant que vous utilisez .NET 3.5 ou version ultérieure (using System.Linq;):

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

Sinon, vous devrez utiliser la méthode CopyTo, ou utiliser une boucle:

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

en C++/CLI et .NET 3.5 Je reçois quand je tente: 'erreur C2039: 'ToArray': n'est pas membre du « Système: : Collections :: Generic :: Dictionnaire :: KeyCollection'' –

+5

@JonCage, 'ToArray' est une méthode d'extension définie dans' System.Linq.Enumerable'; pour autant que je sache, C++/CLI ne supporte pas la méthode d'extension, donc vous devez l'appeler comme une méthode statique normale: 'System :: Linq :: Enumerable :: ToArray (dictionary.Keys)' –

+2

Je sais que c'est super vieux mais pour ceux d'entre nous qui développent pour SharePoint, merci d'inclure l'ancienne solution de framework. – iambriansreed

0

Malheureusement, Je n'ai pas VS à proximité pour vérifier cela, mais je pense que quelque chose comme ça pourrait fonctionner:

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

wher e ??? est votre type de clé.

2

Utilisez cette option si vos clés ne sont pas de type string. Cela nécessite LINQ.

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

Ceci renvoie un 'IEnumerable ', pas un 'string []' –

+0

En outre, il est clair à partir de l'OP que les clés sont de type 'string' (bien qu'à l'origine il y avait un problème de formatage qui l'empêchait de s'afficher). –

+0

Comme ma réponse l'indique, utilisez-le si votre clé n'est pas de type chaîne et que vous voulez toujours une chaîne ... –

4

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

Si vous n'avez pas besoin du tableau (que vous ne sont généralement pas besoin), vous pouvez simplement parcourir les clés.

+0

+1 pour "... itérer sur les clés"; cela semble généralement mieux que de les copier. –

0

Ou peut-être une extension générique à portée de main ...

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