2010-03-25 3 views
2

Для ScoreOption, я ожидаю получить следующий вход «A», «B», и Т_ (состояние), например T_NYОператор switch - переменная «case»?

Как я могу написать заявление переключатель случай для третьего варианта T_ (состояние)?

switch(ScoreOption.ToUpper().Trim()) 
{ 
    case "A": 
     .... 
     break; 
    case "B": 
     .... 
     break; 
    case T_???? 
     .... 
     break; 
} 

Я мог бы написать инструкцию if-else?

ответ

15
string s = ScoreOption.ToUpper().Trim(); 
switch(s) 
{ 
    case "A": 

     .... 

     break; 
    case "B": 

     .... 

     break; 
    default: 
     if (s.StartsWith("T_")) 
     { 
     .... 
     }      
     break; 

} 
10

Вы не можете иметь переменную в качестве аргумента в инструкции switch. Вы должны сделать что-то вроде

case "T_NY": 
case "T_OH": 
break; 

т.д.

Теперь то, что вы могли бы сделать, это

switch (ScoreOption.ToUpper().Trim()) 
{ 
    case "A": 
    break; 
    case "B": 
    break; 
    default: 
//catch all the T_ items here. provided that you have specifed all other 
//scenarios above the default option. 
    break; 

} 
2
switch(ScoreOption.ToUpper().Substring(0, 1)) 
    { 
     case "A": 

      .... 

      break; 
     case "B": 

      .... 

      break; 
     case "T": 
      ValidateState(ScoreOption); 
      .... 
      break; 

    } 

Но, да, серия если заявления может быть лучше. В любом случае все это будет сгенерировать коммутатор, поскольку система не может делать никаких причудливых трюков в таблицах строк.

1

Вы также можете создать словарь с функциями, содержащими код для запуска, когда значение соответствует.

var dict = new Dictionary<string, Action<T,U,V>(); 
dict.Add("A", (x,y,z) => { 
    ... 
}); 
var func = dict[val]; 
func(v1,v2,v3); 
0

Как насчет обработки A и B отдельно, а переключатель - это решение о состоянии, которое является самой большой переменной. Что-то вроде;

char firstCharacter = ScoreOption.ToUpper().CharAt(0); 

if(firstCharacter.Equals("A")) { 
    ... 
}else if(firstCharacter.Equals("B")) { 
    ... 
}else { 
    switch(ScoreOption.Split("_")[1]) { 
    case "NY": 
     ... 
     break; 
    case "OH": 
     ... 
     break; 
    default: 
     ... 
     break; 
    } 
} 
Смежные вопросы