2011-08-02 9 views
3

case文で使用される定数の値を知る方法が必要です。これは可能ですか?例えば case文の定数の値をプログラムで取得する

private void myswitchfunc(string myvar) { 
    switch(myvar) { 
     case "hello": 
      mycallback(); //no variable passing! 
      break; 
     case "hi": 
      mycallback(); //no variable passing! 
      break; 
    } 
} 
private void mycallback() { 
     //print the name of the constant in the calling case 
} 

私はこの http://www.csharp-examples.net/reflection-calling-method-name/

+2

おそらく、あなたが呼んでいる関数に値を渡すことはできません。なぜなら、それは明らかな選択肢のようです。 –

+0

ちょうどそれを関数に渡してください...あなたが探している "解決策"はばかばかしいでしょう。 –

+0

私はAPIのライブラリを提供しようとしています。 「mycallback」はAPIです。問題はこれです:API関数は成功しない可能性があります。このシナリオでは、後で自分のライブラリで決められた同じswitch-caseステートメントでユーザーの関数を呼び出す必要があります。私はデリゲートの列によって問題を解決しました。 – tdolphin

答えて

3

いいえ、あなたは値を渡す必要がありますですようになった最も遠いです。または、共有された外部スコープ内の変数を使用する(Cameronから)

+1

または共有の外側スコープの変数を使用 – Cameron

+0

確かに、良い点。 – DaveShaw

1

Reflectionを使用するのと同じくらい複雑にする必要はありますか? mycallback()メソッドにアクセスするために、メンバ変数に定数の値を格納するだけでよいですか?例:

class MyClass 
{ 
    private string _MySwitchString; 

    private void myswitchfunc(string myvar) { 
    _MySwitchString = myvar; 
    switch(myvar) { 
     case "hello": 
      mycallback(); //no variable passing! 
      break; 
     case "hi": 
      mycallback(); //no variable passing! 
      break; 
     } 
    } 
    private void mycallback() { 
      //print the name of the constant in the calling case 
     Console.Writeline(_MySwitchString); 
    } 
} 

メモこれはテストされていません。

3
private static void myswitchfunc(string myvar) 
{ 
    Action mycallback =() => Console.WriteLine(myvar); 
    switch (myvar) 
    { 
     case "hello": 
      mycallback(); //no variable passing! 
      break; 
     case "hi": 
      mycallback(); //no variable passing! 
      break; 
    } 
} 
+0

厳密にはこれがこの例で設定された質問に答えていますが、私は何とかこれがOPの意図であると疑っています。賢い。 – iandotkelly

0

"if"、 "else if"文を使用する必要がある場合です。これは、switch-caseステートメントでは実行できません。

+0

フェアポイント@CharithJ。私は質問が「スイッチ」または「if」コントロールフローの使用に関連しているとは思わない。 mycallback()がパラメータを持つことができないというルールを適用すると、「コールバックのパラメータとして渡すことができないときに、コールバックに情報を渡す方法は?」私は通常、コメントを残しますが、あなたはちょうど質問を誤解していると思いました。 ifを使用するとどのように役立ちますか?同等のif-else-ifはまったく同じように動作します。 – iandotkelly

関連する問題