2016-08-14 7 views
2

何回も私はこれに似たようなものをしなければなりませんでした。しかし、今私はこのような50以上の場合があり、この方法は悪いようです。関数呼び出しに値を関連付ける方法は?私はいつもこのようにそれをやった</p> <pre><code>if (value == certainValueA) call functionA() if (value == certainValueB) call functionB() </code></pre> <p>:

私はもっと効率的な方法をお伝えしたいと思います。その解決法はおそらく十分に文書化されていますが、これまで私がそのようなことを見つけるために使用している言葉の組み合わせは、興味深い結果を返しません。

私はほとんど何を見るかについて指示が必要です。

+0

呼び出す関数のシグネチャはすべて同じですか?現在のケースでは – Steve

+0

はい、しかし私は彼らがしなかったベースでいくつかのケースを持っています –

+1

インデックス(または、それらが整数ではない場合はキー)として関心のある値を持つマップを持っていると考えていますか?あなたの価値? – ray

答えて

6

デリゲートでいっぱいになったディクショナリを使用できます。次のようなもの:

var dispatch = new Dictionary<TypeOfValue, Action>() { 
    { certainValueA,() => functionA() }, 
    { certainValueB,() => functionB() }, 
}; 

TypeOfValue value = // get value here 

dispatch[value](); 
+0

値は呼び出されていませんか? '()=> functionA'(カッコがないこと)にするべきではありませんか? – ray

+4

'()=>'はアクションを定義しており、呼び出すのではないため、辞書を宣言するときに値は呼び出されません。あなたは実際には '{certainValueA、functionA}'と言うこともできます - これは同じように動作します。 – Blorgbeard

+0

私はあなたの2番目の例を覚えていました。第1のケースを明確にしてくれてありがとう。 – ray

関連する問題

 関連する問題