2009-10-25 219 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'' – 2013-05-02 09:00:59

+5

@JonCage,'ToArray'是'System.Linq.Enumerable'中定义的扩展方法;据我所知,C++/CLI不支持扩展方法,所以你必须把它作为一个普通的静态方法调用:'System :: Linq :: Enumerable :: ToArray(dictionary.Keys)' – 2013-05-02 09:09:22

+2

我知道这是超级老,但对于我们这些为SharePoint开发的人,感谢您使用旧的框架解决方案。 – iambriansreed 2013-09-25 17:26:10

0

不幸的是,我没有附近的VS来检查这一点,但我认为像这样的东西可能会工作:

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

其他e?是你的关键类型。

2

如果您的密钥不是字符串类型,请使用此选项。它需要LINQ。

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

这将返回一个'IEnumerable的',而不是一个'串[]' – 2009-10-25 16:49:02

+0

此外,它是从OP,该键是类型'string'的明确(虽然原本有阻止其表示格式的问题)。 – 2009-10-25 17:32:36

+0

正如我的答案所述,如果你的密钥不是字符串类型,并且你还想要一个字符串,就使用它... – 2009-10-25 18:19:50

4

随着dictionary.Keys.CopyTo (keys, 0);

如果您不需要阵列(你通常不需要),你只需遍历键。

+0

+1 ...“...遍历密钥”;这通常比复制出来要好。 – 2009-10-25 18:52:21

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