自定义错误与自定义异常

时间:2016-02-11 11:55:50

标签: vb.net error-handling vb6 vb6-migration

我正在将一些vb6代码更新为vb.net。此旧代码中的错误处理使用On Error GoToOn Error Resume Next,并在每个方法的末尾使用错误句柄。例如:

Public Function Init() As Boolean
    On Error GoTo Err_Init
    Init = True
Exit_Init: 
    Exit Function 
Err_Init:
    Init = False
    Resume Exit_Init
End Function

现在我正在将此代码更新为vb.net我正在将所有错误处理更改为try - catch语句。我可以将Public Sub Main函数包装在try - catch语句中并捕获顶层的所有错误,或者将以上代码替换为以下代码:

Public Function Init() As Boolean
    Try
        Init = True
    catch e As exception
        Init = false
    End Try
End Function

如果在旧代码中设置了自定义错误(Error 9999),如果未满足某些If语句,则会出现“我的问题”。在函数末尾的错误句柄中,它检查错误是否不是9999。如果不是那么它会适当地处理它。使用第一个例子:

Public Function Init() As Boolean
    On Error GoTo Err_Init
    Dim a As Integer
    If (a <> 10)
        Init = True
    Else
        Error 9999
    End If
Exit_Init: 
    Exit Function 
Err_Init:
    If (Err.number() <> 9999)
        Init = False
    End If
    Resume Exit_Init
End Function

所以我的问题是,我如何使用try-catch语句来复制这个error 9999,因为在我的代码中它并不总是抛出相同的异常,因此为什么只抛出一个自定义{ {1}}可以全面使用并用于标记可以忽略的错误,然后您可以捕获重要的错误。有没有办法error 9999,有点像?

1 个答案:

答案 0 :(得分:1)

您应该创建一个自定义异常并在catch中进行separetly处理。 以下是有关如何创建自定义例外的示例:https://msdn.microsoft.com/en-us/library/87cdya3t(v=vs.110).aspx

然后以这种方式编写代码:

Public Function Init() As Boolean
     Try
        If (a = 10) Then
          Throw New YourCustomException()
        End If
     Catch yourEx As YourCustomException
        'Do whatever you want to do when the code throws your custom exception            
     Catch generalException As Exception
        Return False
     End Try

     Return True
End Function