2012-05-11 3 views
7

私のコードでは、パケットのシンボルとしてコード化された項目のテキスト名を扱いたいと思います。辞書値でスイッチを使用するには?

普通の状況では、1012は私にはcat, dog, cat, frogを意味しますが、このように多くのペアが存在するため、すべてを覚えていません。時には彼らを変更する必要があるので、私はその目的のためにDictionary<string, int>を使うべきだと思った。しかし、その後...

switch (symbol) 
{ 
    case "0": { /* ... */ } 
    case "1": { /* ... */ } 
    case "2": { /* ... */ } 
    case "n": { /* ... */ } 
} 

は... ...

​​

になり、スタジオは、私は私のスイッチのための定数を使用する必要があると述べています。

どうすればいいですか?

UPD:そのよう動物とその値のペアの数は、実行時にのみ知られているので、コードは(私は推測)の定数を使用することはできません。

+0

スイッチブロックで何をしていますか?基本的には、定数でない値をオンにすることはできないので、* some * alternativeを考える必要があります。いろいろな選択肢がありますが、より多くの情報が必要です。 –

+3

代わりに 'enum'を使うことを考えましたか?または、実行時に値が変更されますか? –

+0

私は新しいスプライトにTexture2Dを割り当て、それはそれぞれの状況に固有のものです。 – user1306322

答えて

15

代わりにFunc<T>またはActionを辞書に格納することができます。

var dict = new Dictionary<int, Action>(); 
dict.Add(1,() => doCatThing()); 
dict.Add(0,() => doDogThing()); 
dict.Add(2,() => doFrogThing()); 

はその後、そのようにそれを使用します。

var action = dict[1]; 
action(); 
+4

アクション辞書の+1。確かに素晴らしい組み合わせ;) – Sascha

+1

"アクション辞書"はちょうどクールな音。私は子供の漫画で聞いていたようなものです。アクションディクショナリが恐れてはいけない! – Servy

+0

@Servy:子供たちのひどい恐怖に使うもののような音;) –

1

それは、それが言語制限VS制限ですないです。だからあなたはあなたが望むものを正確に行うことができません。 1つのアイデアは、列挙型を使用することです。列挙型はそのエントリにchar値を使用できません。その情報についてはWhy we can't have "char" enum typesを見てください。

0

辞書ではなく列挙型を使用します。

enum AnimalsEnum { Dog, Cat, Bird, Fish }; 


public whathuh(AnimalsEnum whichAnimal) { 
switch(whichAnimal) { 
    case AnimalsEnum.Dog: 
    case AnimalsEnum.Cat: 
... 
} 

} 
関連する問題