9

私のコードでは、パケット内の1つのシンボルとしてコード化されているアイテムのテキスト名を使用したいと思います。

普段の状況では、私にとって1012は意味cat, dog, cat, frogがありますが、このようなペアはもっとたくさんあるので、すべてを覚えるのは難しいです。時々変更が必要になるので、そのために使うべきだと思いDictionary<string, int>ました。しかし、その後…</ p>

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

…になる…</p>

switch (symbol)
{
    case kvpDic["cat"]: { /* ... */ }
    case kvpDic["dog"]: { /* ... */ }
    case kvpDic["frog"]: { /* ... */ }
    case kvpDic["something else"]: { /* ... */ }
}

スタジオは、スイッチに定数を使用する必要があると言っています。

どうすればそれを機能させることができますか?

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

4

3 に答える 3

19

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();
于 2012-05-11T18:13:40.043 に答える
1

これはVSの制限ではなく、言語の制限です。したがって、あなたはあなたが望むことを正確に行うことができなくなります。1つのアイデアは、列挙型を使用することです。列挙型はそのエントリにchar値を使用できません。そのための情報については、 「char」列挙型を使用できない理由を参照してください。

于 2012-05-11T18:13:54.483 に答える
0

辞書ではなく列挙型を使用したい。

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


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

}
于 2012-05-11T18:16:19.100 に答える