跳转到内容

Visual Basic .NET/异常处理

来自维基教科书,自由的教科书

异常处理

[编辑 | 编辑源代码]

在代码中处理错误有两种主要方式,以避免在错误发生时停止程序。

On Error GoTo

[编辑 | 编辑源代码]

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

[编辑 | 编辑源代码]

“结构化错误处理”可以通过较新的 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]

  1. Eric Lippert's Blog
华夏公益教科书