通过switch语句(有时工作?)

Mic*_*kus 2 c# switch-statement fall-through

我有一个switch语句,如下所示:

switch (condition)
{
    case 0:
    case 1:
        // Do Something
        break;
    case 2:
        // Do Something
    case 3:
        // Do Something
        break;
}
Run Code Online (Sandbox Code Playgroud)

我收到编译错误告诉我 Control cannot fall through from one case label ('case 2:') to another

嗯......是的,你可以.因为你是从做它case 0:通过对case 1:.

事实上,如果我删除了我case 2:和它的相关任务,代码就会编译并从中case 0:进入case1:.

那么这里发生了什么,我怎样才能让我的case语句通过并执行一些中间代码?

Fem*_*ref 10

堆叠标签和掉落之间存在差异.

C#支持前者:

case 0:
case 1:
    break;
Run Code Online (Sandbox Code Playgroud)

但不是落空:

case 2:
    // Do Something
case 3:
    // Do Something
    break;
Run Code Online (Sandbox Code Playgroud)

如果你想要堕落,你需要明确:

case 2:
    // Do Something
    goto case 3;
case 3:
    // Do Something
    break;
Run Code Online (Sandbox Code Playgroud)

推理显而易见,隐式直通可能导致不干净的代码,特别是如果你有多于一行或两行,并且不清楚控制如何流动.通过强制显式降低,您可以轻松地遵循流程.

参考:msdn