我有这样的事情:字典词典,如何获得价值?
private IDictionary<A, IDictionary<B, C>> data;
,我想要做的事,如:
IDictionary<B, C> values = new Dictionary<B, C>();
values = Data.Values;
就像我会在Java中做,但是这是行不通的。我无法弄清楚。感谢您的帮助
错误:
不能类型的ICollection>隐式转换为IDictionary的
我有这样的事情:字典词典,如何获得价值?
private IDictionary<A, IDictionary<B, C>> data;
,我想要做的事,如:
IDictionary<B, C> values = new Dictionary<B, C>();
values = Data.Values;
就像我会在Java中做,但是这是行不通的。我无法弄清楚。感谢您的帮助
错误:
不能类型的ICollection>隐式转换为IDictionary的
,尝试使用类型推断
var coll = data.Values;
然后尝试使用foreach
-loop来访问Collection
以访问单个字典。
foreach(var dic in coll){
//work on Dictionary
}
查看here仅供参考。
啊我现在得到它..通过价值观我会得到字典的集合,不只是一个词典..谢谢 – 2013-04-08 19:16:23
是的,这是真的! – 2013-04-08 19:17:37
你还是会叫.Values
,但它返回一个ValueCollection,而不是一个列表。为了得到公正的价值观,而不是键/值对的列表,使用一个选择:如果你不知道什么会出来
List<C> values = data.Values.Select(x => x.value);
是的,以及我如何将ICollection投射到IDictionary?有ToDictionary方法,但我真的不知道如何使用它 – 2013-04-08 19:09:53
你想在*其他*方向?您需要一种方法来为ICollection中的每个项目构建密钥,以便将其放入字典中。 – 2013-04-08 19:11:38
data.Values是通用的,这个不能用 – 2013-04-08 19:15:07
您正试图访问您的IDictionary<B, C>
的ICollection
,因为集合中有许多字典,因此这将不起作用。
如果你希望所有的字典映射下来,那么你可以使用一个Lookup
:
IDictionary<A, IDictionary<B, C>> data;
var values = data.ToLookup(d => d.Value.SelectMany(d => d.Key), d => d.Value.SelectMany(d => d.Value));
,这将给你多键多个值。
什么不起作用?你有错误吗? – 2013-04-08 19:06:00
'data [key1] [key2]' – Romoku 2013-04-08 19:06:25
试试这个 values = Data [A];应该工作 – 2013-04-08 19:07:27