我有一个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