2013-04-08 135 views
-1

我有这样的事情:字典词典,如何获得价值?

private IDictionary<A, IDictionary<B, C>> data; 

,我想要做的事,如:

IDictionary<B, C> values = new Dictionary<B, C>(); 
values = Data.Values; 

就像我会在Java中做,但是这是行不通的。我无法弄清楚。感谢您的帮助

错误:

不能类型的ICollection>隐式转换为IDictionary的

+1

什么不起作用?你有错误吗? – 2013-04-08 19:06:00

+0

'data [key1] [key2]' – Romoku 2013-04-08 19:06:25

+0

试试这个 values = Data [A];应该工作 – 2013-04-08 19:07:27

回答

1

,尝试使用类型推断

var coll = data.Values; 

然后尝试使用foreach -loop来访问Collection以访问单个字典。

foreach(var dic in coll){ 
//work on Dictionary 
} 

查看here仅供参考。

+0

啊我现在得到它..通过价值观我会得到字典的集合,不只是一个词典..谢谢 – 2013-04-08 19:16:23

+0

是的,这是真的! – 2013-04-08 19:17:37

2

你还是会叫.Values,但它返回一个ValueCollection,而不是一个列表。为了得到公正的价值观,而不是键/值对的列表,使用一个选择:如果你不知道什么会出来

List<C> values = data.Values.Select(x => x.value); 

http://msdn.microsoft.com/en-us/library/ekcfxy3x.aspx

+0

是的,以及我如何将ICollection投射到IDictionary?有ToDictionary方法,但我真的不知道如何使用它 – 2013-04-08 19:09:53

+0

你想在*其他*方向?您需要一种方法来为ICollection中的每个项目构建密钥,以便将其放入字典中。 – 2013-04-08 19:11:38

+0

data.Values是通用的,这个不能用 – 2013-04-08 19:15:07

0

您正试图访问您的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)); 

,这将给你多键多个值。