2017-05-31 180 views
-1

我試圖讓我的系統在調用和設置字符位圖方面更具動態性;我想在那裏有一個龐大的字典,它包含所有使用兩個字符串(它們是參數)進行搜索的字符,用於調用或返回一個意味着該值的位圖列表。C#詞典中的字典

public Dictionary< Dictionary<String, String>, List<Bitmap>> Character_Spreadsheet = 
    new Dictionary<Dictionary<String, String>, List<Bitmap> >(); 

private List<Bitmap> loadAssets(String character, String icon_state) { 
    return Character_Spreadsheet[new Dictionary<character, icon_state>]; 
} 

但是,我收到一個錯誤,兩個參數正在使用像類型。

+0

'<字符,icon_state>'。你在預期類型的​​地方使用它們。錯誤告訴你確切的問題。 –

+1

不清楚錯誤是什麼,但無論如何這不會起作用。做別的事。 – Will

+1

我想你不需要一個字典<字符串,字符串>作爲密鑰,嘗試使用例如元組<字符串,字符串>,而不是 –

回答

0

Dictionary<character, icon_state>無效,您必須定義類型而不是變量。

private List<Bitmap> loadAssets(String character, String icon_state) 
{ 
    Dictionary<string, string> result = new Dictionary<string, string>(); 
    result.Add(character, icon_state); 
    return Character_Spreadsheet[result]; 
} 

或內嵌

private List<Bitmap> loadAssets(String character, String icon_state) 
{ 
    return Character_Spreadsheet[new Dictionary<string, string>(){{character, icon_state}}]; 
} 
+0

你必須提到使用'Dictionary'作爲另一個'Dictionary'的關鍵字是一個壞主意,並沒有任何意義。 – juharr

0

我不會給你的代碼是否將工作或沒有,但這個錯誤是因爲你不能做到這一點說話(以箭頭表示):

return Character_Spreadsheet[new Dictionary<character, icon_state>]; 
               /\   /\ 

你必須在創建字典時提供一個類型,所以它會是這樣的:

return Character_Spreadsheet 
    [new Dictionary<string, string> { { character, icon_state } }]; 
0

感謝所有人對我的評論和分享您的知識;我對新手錯誤表示歉意,因爲我剛剛在幾天前開始用C#編程,而我只是試着按照自己的方式工作。我從每個人的評論中拿出一些小小的東西,並且做出了看起來合乎邏輯和看起來更好的東西

public Dictionary< Tuple<String,String> , List<Bitmap>> Character_Spreadsheet = new Dictionary<Tuple<String,String> , List<Bitmap> >(); 

private List<Bitmap> loadAssets(String character, String icon_state) { 
     Tuple<String, String> result = new Tuple<String, String>(character, icon_state); 
     return Character_Spreadsheet[result]; 
    } 

我希望這看起來很好,很有道理;如果沒有,請通知我。

+0

您可以在單行寫入方法 'return Character_Spreadsheet [new Tuple (character,icon_state)];' –

+0

我在一個單獨的行中寫了它以防萬一,我想對其進行修改因爲我將不得不從圖形/位圖切換到OpenGL,我不知道隨之而來的是什麼變化。 –

0

我覺得你想要做一個類似於

private Dictionary<Tuple<string, string>, IEnumerable<System.Drawing.Bitmap>> _assets; 

public IEnumerable<Bitmap> loadAssets(string character, string iconState) 
{ 
    return _assets[new Tuple<string, string>(character, iconState)]; 
}