2017-05-31 283 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)]; 
}