跳过Switch后的语句

时间:2012-10-16 21:25:41

标签: 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); 

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

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

1 个答案:

答案 0 :(得分:6)

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

在switch语句中抛出一个异常,并且它被捕获到更高位置以便程序继续。

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