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期待通りに作品を削除します。ただし、1つのケースで非常に小さなスイッチを配置すると、スイッチが再び早期に終了します。

これは既知の動作ですか?breakingfrom switchステートメントが関数を終了させる(returnキーワードを呼び出さない)状況はありますか?

4

1 に答える 1

6

コードがswitchステートメントを渡さないことが確実な場合は、他に1つの可能性しかありません。

switchステートメントでスローされる例外があり、それはどこか上の場所でキャッチされているため、プログラムは続行されます。

この提案を検証するために試みることができる1つのことは、スイッチを一時try{}catch{}ブロックでラップして例外時にMessageBoxを表示するか、多くのブレークポイントを使用することです。

于 2012-10-16T21:28:29.587 に答える