2010-03-25 136 views
2

對於ScoreOption,我希望得到以下輸入「A」,「B」,並T_(州)例如T_NY開關語句 - 變量「case」?

我怎麼能寫的第三個選項T_(狀態)的情況下,switch語句?

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; 

    } 

但是,是的,一系列的if語句可能會更好的。這就是所有的開關都會產生的,因爲系統不能對字符串做任何奇特的跳轉表技巧。

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; 
    } 
}