2013-04-08 218 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)); 

,這將給你多鍵多個值。