Vb.net 它是如何发生的-如果case语句抛出exception“;“其他情况”;开始工作?

Vb.net 它是如何发生的-如果case语句抛出exception“;“其他情况”;开始工作?,vb.net,exception-handling,switch-statement,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()

看起来不可能,但是

    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
首先,
案例2
运行。抛出异常。紧接着这个调试器显示下一个被处理的语句是
Case-Else
。只有在
Case Else
抛出自己的异常
Catch
块开始工作之后。我从没见过这个把戏。为什么会这样

我确信该块输入了一次(不是这样:第一次输入hit
case2
,第二次输入hit
Case Else

谢谢你的建议

更新: -给马特·威尔科。谢谢你的回答。我在VS2010的选项中切换到了
Strict On
,但没有任何变化<代码>命令是可变的,而不是功能。监视工具显示,在每个步骤上,
命令
都是相同的(
命令
=2)

答复 固定的。是啊。我将代码简化为

        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
并将项目更改为控制台应用程序。正如我所说的那样。修复程序处于
释放模式
。我在
发布模式下调试。当我切换到
调试模式时
一切正常


感谢大家的快速回答

我刚刚尝试了一个简单的示例,说明了您所展示的内容,但对我来说,它的效果与预期相符。当抛出异常时,执行直接跳到
捕获
,而不跳到其他地方。输出为“EX:2”

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

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

什么是
命令
?这应该是
Command()
,还是为此定义了另一个变量/函数?建议您在
上切换
选项Strict On
,如果您还没有+1,我还建议您确保代码实际已正确构建。默认情况下,VisualStudio将运行成功构建的最后一个版本,这是毫无帮助的,因为它与当前源代码不匹配。