切换语句 - 变量“case”?

时间:2010-03-25 18:18:59

标签: c# .net switch-statement

对于ScoreOption,我希望获得以下输入“A”,“B”和T_(状态),例如T_NY

如何为第三个选项T_(state)编写case switch语句?

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

我不妨写一下if-else语句?

5 个答案:

答案 0 :(得分:16)

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

        ....

        break;
    case "B":

        ....

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

}

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

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

            .... 

            break; 
        case "B": 

            .... 

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

    } 

但是,是的,一系列if语句可能会更好。无论如何,所有的开关都会产生,因为系统不能对字符串做任何奇特的跳转表技巧。

答案 3 :(得分:1)

您还可以创建一个字典,其中的函数包含值匹配时要运行的代码。

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

答案 4 :(得分:0)

分别处理A和B以及切换是最大变量State的决定。喜欢的东西;

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