2009-10-25 217 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; 
    }