программно получить значение константы в регистре - PullRequest
3 голосов
/ 03 августа 2011

Мне нужен способ узнать значение константы, используемой в операторе 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 /-колл-метод имя отражения /

Ответы [ 4 ]

3 голосов
/ 03 августа 2011
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;
    }
}
3 голосов
/ 03 августа 2011

Нет, вам нужно будет передать значение.Или используйте переменную в общей внешней области (От Камерон )

1 голос
/ 03 августа 2011

Вам нужно сделать так же сложно, как использовать 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); 
   }
}

Обратите внимание, что это не проверено.

0 голосов
/ 03 августа 2011

Это тот случай, когда вы должны использовать операторы if, else if. Это нельзя сделать с помощью операторов switch-case.

...