怎么会发生 - 如果case语句抛出异常“case else”开始工作?

时间:2012-06-19 14:38:10

标签: vb.net exception-handling switch-statement

看起来不可能,但......

    Try
    Select Case command
            Case 1
              smth()
            Case 2
                If Not validSmth() Then
                    Throw New Exception(errMsg)
                Else
                   doSmth()
                End If
            Case 3
                doSmthElse()
            Case Else
                Throw New Exception(errMsg2)
        End Select
    Catch ex As Exception
        ProcessEx()
    End Try

首先Case 2运行。引发异常。在此调试器显示下一个已处理的语句为Case Else之后。只有在Case Else抛出自己的异常Catch块后才开始工作。我从未见过这个伎俩。为什么会这样?

我确定该块已输入一次(不是这样的:首先输入点击Case 2,然后点击Case Else)。

感谢任何想法。

更新

-To Matt Wilko。谢谢你的回答。我在VS2010的选项中切换到Strict On但没有任何改变。 Command是可变的,而不是功能。监视工具显示每个步骤Command都相同(Command = 2)。

答案

固定。 Yeeaaaahhh。我简单的代码

        Try
        Select Case 2
            Case 2
                Throw New Exception("123")
            Case Else
                Throw New Exception("345")
        End Select
    Catch ex As Exception
        wtf(ex.Message)
    End Try

并将项目更改为控制台应用。这就像我提到的那样。该修复程序位于Release mode。我正在Release mode进行调试。当我切换到Debug mode时,一切都按预期进行。

感谢大家快速解答。

1 个答案:

答案 0 :(得分:2)

我刚刚尝试了一个你所展示的简单例子,但对我而言,它按预期工作。抛出异常时,执行会直接跳转到Catch而不是其他地方。输出显示为“EX:2”。

我会设置一些断点,以确保您没有输入两次代码。如果失败,请重新启动Visual Studio(有时调试器会变得很时髦)。我认为你所描述的行为不可能发生。

Sub Main()

    Dim Command As Integer = 2
    Try
        Select Case Command
            Case 1
                Console.WriteLine("1")
            Case 2
                Throw New Exception("2")
            Case 3
                Console.WriteLine("3")
            Case Else
                Throw New Exception("ELSE")


        End Select
    Catch ex As Exception
        Console.WriteLine("EX:" & ex.Message)
    End Try

    Console.ReadLine()

End Sub
相关问题