我有一個Dictionary<string, List<Order>>
,我想擁有數組中的鍵列表。但是,當我選擇將Dictionary.keyscollection轉換爲字符串數組
string[] keys = dictionary.Keys;
這並不編譯。
如何將KeysCollection
轉換爲字符串數組?
我有一個Dictionary<string, List<Order>>
,我想擁有數組中的鍵列表。但是,當我選擇將Dictionary.keyscollection轉換爲字符串數組
string[] keys = dictionary.Keys;
這並不編譯。
如何將KeysCollection
轉換爲字符串數組?
假設你正在使用.NET 3.5或更高版本(using System.Linq;
):
string[] keys = dictionary.Keys.ToArray();
否則,你將不得不使用CopyTo方法,或者使用一個循環:
string[] keys = new string[dictionary.Keys.Count];
dictionary.Keys.CopyTo(keys, 0);
不幸的是,我沒有附近的VS來檢查這一點,但我認爲像這樣的東西可能會工作:
var keysCol = dictionary.Keys;
var keysList = new List<???>(keysCol);
string[] keys = keysList.ToArray();
其他e?是你的關鍵類型。
如果您的密鑰不是字符串類型,請使用此選項。它需要LINQ。
string[] keys = dictionary.Keys.Select(x => x.ToString()).ToArray();
這將返回一個'IEnumerable的
此外,它是從OP,該鍵是類型'string'的明確(雖然原本有阻止其表示格式的問題)。 – 2009-10-25 17:32:36
正如我的答案所述,如果你的密鑰不是字符串類型,並且你還想要一個字符串,就使用它... – 2009-10-25 18:19:50
隨着dictionary.Keys.CopyTo (keys, 0);
如果您不需要陣列(你通常不需要),你只需遍歷鍵。
+1 ...「...遍歷密鑰」;這通常比複製出來要好。 – 2009-10-25 18:52:21
也許一個方便的通用擴展...
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;
}
使用C++/CLI和.NET 3.5我得到這個當我嘗試:'錯誤C2039: 'ToArray的':是不是系統」的成員: :Collections :: Generic :: Dictionary :: KeyCollection'' –
2013-05-02 09:00:59
@JonCage,'ToArray'是'System.Linq.Enumerable'中定義的擴展方法;據我所知,C++/CLI不支持擴展方法,所以你必須把它作爲一個普通的靜態方法調用:'System :: Linq :: Enumerable :: ToArray(dictionary.Keys)' – 2013-05-02 09:09:22
我知道這是超級老,但對於我們這些爲SharePoint開發的人,感謝您使用舊的框架解決方案。 – iambriansreed 2013-09-25 17:26:10