看起来不可能,但......
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
时,一切都按预期进行。
感谢大家快速解答。
答案 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