2009-10-25 4 views

ответ

85

Предполагая, что вы используете .NET 3.5 или более поздней версии (using System.Linq;):

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

В противном случае вам придется использовать метод CopyTo, или использовать цикл:

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

Использование C++/CLI и .NET 3.5, я получаю это когда я пытаюсь: 'ошибка C2039: 'ToArray': не является членом«системы: : Collections :: Generic :: Dictionary :: KeyCollection'' –

+5

@JonCage, 'ToArray' - это метод расширения, определенный в' System.Linq.Enumerable'; насколько я знаю, C++/CLI не поддерживает метод расширения, поэтому вы должны называть его обычным статическим методом: 'System :: Linq :: Enumerable :: ToArray (dictionary.Keys)' –

+2

Я знаю, что это супер старый, но для тех из нас, кто развивается для SharePoint, благодарю вас за то, что вы включили более раннее решение для платформы. – iambriansreed

0

К сожалению, У меня нет ВС поблизости, чтобы проверить это, но я думаю, что-то вроде этого может работать:

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

wher e ??? это ваш ключевой тип.

2

Используйте это, если ваши ключи не имеют типа string. Он требует LINQ.

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

Это возвращает 'IEnumerable ', а не 'string []' –

+0

. Кроме того, из OP ясно, что ключи имеют тип 'string' (хотя первоначально была проблема с форматированием, которая помешала ему показать). –

+0

Как говорится в моем ответе, используйте его, если ваш ключ не имеет строку типа, и вы все еще хотите строку ... –

4

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

Если вам не нужен массив (который вы обычно не нужно), вы можете просто перебирать по клавишам.

+0

+1 для «... итерации по клавишам»; что обычно лучше, чем копировать их. –

0

Или, возможно, удобный универсальный удлинитель ...

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; 
    } 
Смежные вопросы