C#开关/中断

问题描述 投票:13回答:4

看来我需要在使用C#的switch语句的每个case块中使用一个break。

我可以用其他语言查看原因,在这里您可以深入了解下一个case语句。

案例块是否有可能掉入其他案例块?

非常感谢,非常感谢!

c# switch-statement break
4个回答
33
投票

是的,您可以通过两种方式进入下一个案例块。您可以使用不需要中断的空案例,也可以使用goto跳转到下一个(或任何一个)案例:

switch (n) {
  case 1:
  case 2:
  case 3:
    Console.WriteLine("1, 2 or 3");
    goto case 4;
  case 4:
    Console.WriteLine(4);
    break;
}

6
投票

“ break”的执行可以阻止错误。如果您需要强制通过,请使用“ goto case”(将替换为适当的值)

以下示例显示了您可以做什么:

switch(n)
{
    case 1:
    case 2:
      //do something for 1+2
      //...
      goto case 3;
    case 3:
      //do something for 3, and also extra for 1+2
      //...
      break;
    default:
      //do something for all other values
      //...
      break;
}

请参见http://msdn.microsoft.com/en-us/library/06tc147t%28VS.80%29.aspx


3
投票

C#不支持隐式直通构造,但是break(或goto)仍然必须存在(msdn)。您唯一可以做的就是按照以下方式处理堆叠箱:

switch(something) {
    case 1:
    case 2:
      //do something
      break;
    case 3:
      //do something else
}

但是break(或另一个跳转语句,例如goto)只需要在那儿。


1
投票

在我的C#(.NET 1.1,CF)代码中,两个都允许:

switch (_printerChoice) 
{
    case BeltPrintersEnum.ZebraQL220: 
        return new ZebraQL220Printer();
        break;
    case BeltPrintersEnum.ONeal: 
        return new ONealPrinter();
        break;
    default:            
        return new ZebraQL220Printer();         
                        break;  
}

switch (_printerChoice) 
{
    case BeltPrintersEnum.ZebraQL220: 
        return new ZebraQL220Printer();
    case BeltPrintersEnum.ONeal: 
        return new ONealPrinter();
    default:            
        return new ZebraQL220Printer();         
}

...但是随着中断,它们变灰,因此被认为是没有意义的。因此,至少就我而言,它们是允许的,但不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.