以编程方式获取case语句中的常量值

时间:2011-08-02 22:06:23

标签: c# .net switch-statement

我需要一种方法来了解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/

4 个答案:

答案 0 :(得分:3)

不,您需要传递该值。或者在共享外部范围中使用变量(来自Cameron

答案 1 :(得分: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;
    }
}

答案 2 :(得分: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 :(得分:0)

在这种情况下,您必须使用“if”,“else if”语句。使用switch-case语句无法做到这一点。