跳过Switch后的语句

KCh*_*oux 1 c# debugging switch-statement control-flow

我可能在这里(22岁)有一个高级时刻,但我无法弄清楚为什么C#正在跳过我之后的一个声明switch.代码如下:

switch (shape)
{
    case ToolShape.BasicTool:
        EditTool = (LastTool.ToolType == ToolShape.BasicTool)
            ? new BasicTool((BasicTool)LastTool)
            : new BasicTool(ToolNumber, BasicToolType.TypeA,
                "Tool " + ToolNumber, "", 1.0, 60.0, 0.0, 0.0, 0.0, 10.0);
        break;

    case ToolShape.AdvancedTool:
        EditTool = (LastTool.ToolType == ToolShape.AdvancedTool)
            ? new AdvancedTool((AdvancedTool)LastTool)
            : new AdvancedTool(AdvancedTool, "Tool " + ToolNumber, "", 1.0, 10.0, 2.0, 
                AdvancedTool.Light, AdvancedTool.Round);
        break;

    case ToolShape.SpecialTool:
        EditTool = (LastTool.ToolType == ToolShape.SpecialTool)
            ? new SpecialTool((SpecialTool)LastTool)
            : new SpecialTool(SpecialTool, "Tool " + ToolNumber, "", 
                1.0, 1.0, 90.0);
        break;
}

// We never seem to reach anything below here ----------------
LoadToolToForm(EditTool); 
Run Code Online (Sandbox Code Playgroud)

它永远不会达到这种LoadToolToForm(EditTool)说法.或者MessageBox.Show("...")我卡在那里,用于调试目的.switch按预期删除工作.尽管如此,在一个案例中将一个非常小的开关放在那里会导致它过早地退出.

这是已知行为吗?是否存在breaking从switch语句导致函数退出的情况(没有调用return关键字).

cae*_*say 6

如果您确定代码永远不会传递switch语句,则只有另一种可能性:

在switch语句中抛出异常,并且它被捕获到更高的位置,因此程序只会继续.

您可以尝试验证此建议的一件事是将开关包装在临时try{}catch{}块中并在Exception上显示MessageBox,或者使用大量断点.