如何在switch语句中使用通配符?

时间:2014-09-19 19:56:27

标签: c# switch-statement wildcard

我有一个使用3个字母的字符串的switch语句。对于很多情况(但不是全部)我只想关注前2个字母。

示例,我希望每个以“FF”开头的代码都处理相同:

switch(code)
{
   case "FF(?)":
      // Handle it
      break;
   default:
      break;
}

我可以在这做什么?我可以使用通配符吗?我是否必须考虑每个FF代码?

出于显而易见的原因,我不想拥有这样的代码,它可能会变得非常大:

case "FFA":
case "FFB":
case "FFD":
    // Handle it

4 个答案:

答案 0 :(得分:5)

switch处,而不是在case处,前两个字符。

使用default案例然后再回到三个字母的案例。它不是最干净的,但它会起作用。如果交换机没有切断它,有时会if语句。

switch(code.Substring(0, 2))
{
    case "FF":
       ...
    default:
        switch(code)
        {
            case "ABC":
                ....
        }
}

答案 1 :(得分:5)

使用if then else进行这些比较。对于易于识别为离散值的案例,请保留switch case条款。

答案 2 :(得分:2)

只需在switch语句中使用三元运算符

 switch (code.StartsWith("FF")? code.substring(0,2): code)
 {
     case "FF":

     case "FAS":

     case "FAY"

     // etc.
 } 

表示倍数,请执行以下操作:

 switch (new[] {"FF", "GG", "HH", "JJ"}.Contains(code.substring(0,2))?
                    code.substring(0,2): code)
 {
     case "FF":
     case "GG":
     case "HH":
     case "JJ":

     case "FAS":

     case "FAY"

     // etc.
 } 

答案 3 :(得分:1)

C#中的Switch语句不支持此功能。您需要使用if / else语句:

if (code.StartsWith("FF"))
{
    // Handle it
}
else if (code == "HFD") // etc
{
    // Handle it
}
else 
{
    // default case
}