Visual Basic .NET/异常处理
外观
在代码中处理错误有两种主要方式,以避免在错误发生时停止程序。
VBA 中使用的一种较旧的方法是“非结构化”错误处理,仍然可以通过 On Error GoTo
语法使用,因为它使用指向标签的 Goto。在某些情况下,如果希望在处理完错误后 Resume
处理,这仍然很有用。
Public Sub Main()
On Error GoTo Label1
Dim Result As Integer = 1
Dim a = 1
Dim b = 0
Result = a / b ' Division by zero
Label1:
MessageBox.Show(Result)
End Sub
为了避免定义标签,可以简单地要求在一定时间内忽略所有错误,并使用 On Error GoTo 0
重新激活它们。
On Error Resume Next
Dim Result As Integer = 1
Dim a = 1
Dim b = 0
Result = a / b
On Error GoTo 0
MessageBox.Show(Result)
“结构化错误处理”可以通过较新的 Try...Catch...Finally
语法使用。各种错误条件通过基本 Exception
类的继承者来实现。
Public Sub Main()
Dim Result As Integer = 1
Dim a = 1
Dim b = 0
Try
Result = a / b
Catch ex As Exception
MsgBox(ex.ToString)
Finally
MessageBox.Show(Result)
End Try
End Sub
提示:如果你想在 Catch
块中重新抛出异常,请使用 Throw
关键字而不带任何参数(特别是不要使用“Throw ex”)。如果提供参数,Throw 关键字会重置异常对象的 .StackTrace
属性。在 Catch
块中不带任何参数的 Throw 将重新抛出错误,而不会重置 .StackTrace
属性。[1]