2009-01-11 186 views
0

我想在另一個Dictionary中使用Dictionary作爲TKey。類似於Python的東西。我試過這個,但它給我錯誤。使用字典作爲其他字典中的關鍵字

Dictionary<Dictionary<string, string>, int> dict = new Dictionary<Dictionary<string, string>, int>(); 
Dictionary<string, string> dict2 = new Dictionary<string, string>(); 
dict2["abc"] = "def"; 
dict[dict["abc"] = 20; 
+1

您的最後一行有多個錯誤。如果其中一個引用應該是dict2,則可以參考字典兩次。 (重要的一課:清楚地說明你的變量!)你有一個無與倫比的開放大括號。 – abelenky 2009-01-11 19:06:44

回答

10

是它給你什麼錯誤?難道抱怨你丟失的支架上的4行?

4號線看起來應該是:

dict[dict["abc"]] = 20; 

不過,你可能是說這個,因爲「ABC」是不是字典的關鍵:

dict[dict2["abc"]] = 20; 

dict2["abc"]string,當鑰匙的字典應該是Dictionary<string, string>

但是,讓我們重新檢查一下您的原始目標,然後再沿着這條路走下去。你不應該首先使用可變類型作爲字典鍵。

這可能是你正在尋找的代碼:

Dictionary<string, int> dict = new Dictionary<string, int>(); 
Dictionary<string, string> dict2 = new Dictionary<string, string>(); 
dict2["abc"] = "def"; 
dict[dict2["abc"]] = 20; 

但很難說是肯定的。

4

這是因爲 「字典[」 ABC「]不是字典,但 」串「

正確的,你問的是:。

Dictionary<Dictionary<string, string>, int> dict = new Dictionary<Dictionary<string, string>, int>(); 
Dictionary<string, string> dict2 = new Dictionary<string, string>(); 
dict2["abc"] = "def"; 
dict[dict2] = 20; 

,但我不當然,這是你真的想/需要。

+0

我只是自己輸入相同的.. +1 :) – 2009-01-11 18:36:13

+0

好吧,但我怎麼從內部字典中獲得特定的鍵,值對。 我不想爲外字典中的每個值創建內部字典。 – kamilw 2009-01-11 18:45:42

6

只是想把它放在那裏,我經常發現,處理像你這樣複雜的詞典描述它更好地使用真實姓名,而不是試圖讓代碼的讀者排除它。

根據個人喜好,您可以通過兩種方法之一來完成此操作。可以使用using語句來創建編譯器別名。請注意,您必須使用完全限定類型名稱,因爲這是一個編譯器別名。

using ComplexKey = System.Collections.Generic.Dictionary<String, String>; 
using ComplexType = System.Collections.Generic.Dictionary< 
    System.Collections.Generic.Dictionary<String, String>, 
    String 
    >; 

或者你可以去完整的類型的方式,實際上創建一個繼承自Dictionary的類。

class ComplexKey : Dictionary<String, String> { ... } 
class ComplexType : Dictionary<ComplexKey, String> { ... } 

這樣做會使您和您的代碼的讀者更容易找出您正在做的事情。我的一般經驗法則是,如果我創建一個通用泛型,那麼現在是時候考慮建立一些頭等公民來代表我的邏輯了。