2017-05-31 35 views
-1

文字のビットマップの呼び出しと設定に関して、私のシステムをよりダイナミックにしようとしています。私は、値であることを意図したビットマップリストを呼び出したり返すために、パラメータである2つの文字列を使用して検索するすべての文字を持つ大量の辞書が必要でした。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>]; 
} 

しかし、タイプのように2つのパラメータが使用されているというエラーが表示されます。

+0

'<文字、icon_state>'に似て何かをしたいと思います。タイプが期待される場所で使用しました。エラーはあなたに正確な問題を伝えています。 –

+1

エラーが何であるかはっきりしていませんが、それは決してうまくいかないでしょう。何か他のことをする。 – Will

+1

私はあなたがDictionary をKeyとして必要としないと思っています。例えば、Tuple のように使ってみてください。 –

答えて

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

メソッドを1行に書くことができます 'Return Character_Spreadsheet [文字列、文字列(文字、アイコン状態)]; –

+0

私は別の行に記述しました。私はGraphics/Bitmapから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)]; 
}