2010-03-25 102 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; 
    } 
}