我可能在这里有一个高级时刻(在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关键字)。
答案 0 :(得分:6)
如果您确定代码永远不会传递switch语句,那么只有另一种可能性:
在switch语句中抛出一个异常,并且它被捕获到更高位置以便程序继续。
您可以尝试验证此建议的一件事是将您的开关包装在临时try{}catch{}
块中并在Exception上显示MessageBox,或者使用大量断点。