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
块开始工作之后。我从没见过这个把戏。为什么会这样
我确信该块输入了一次(不是这样:第一次输入hitcase2
,第二次输入hitCase 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将运行成功构建的最后一个版本,这是毫无帮助的,因为它与当前源代码不匹配。