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