13

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

我可以在其他语言中看到这种情况的原因,您可以在其中进入下一个案例语句。

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

非常感谢,非常感谢!

4

4 回答 4

34

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

switch (n) {
  case 1:
  case 2:
  case 3:
    Console.WriteLine("1, 2 or 3");
    goto case 4;
  case 4:
    Console.WriteLine(4);
    break;
}
于 2009-11-25T04:53:41.740 回答
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

于 2009-11-25T04:59:58.557 回答
3

C# 不支持通过构造隐式下降,但break(or goto) 仍然必须存在 ( msdn )。您唯一可以做的就是以下列方式堆叠案例:

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

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

于 2009-11-25T04:53:22.083 回答
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();         
}

...但是随着中断,它们变灰,因此被认为没有实际意义。因此,至少在我的情况下,它们是允许的,但不是必需的。

于 2013-07-26T23:04:06.187 回答