1

我可能在这里有一个高级的时刻(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作品。但是,即使将一个非常小的开关放在一个外壳中也会导致它再次过早退出。

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

4

1 回答 1

6

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

switch 语句中抛出了一个异常,它被捕获到更高的某个地方,因此程序继续运行。

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

于 2012-10-16T21:28:29.587 回答