自定义错误与自定义异常

Custom Error vs Custom Exception

我正在将一些 vb6 代码更新为 vb.net。旧代码中的错误处理使用 On Error GoToOn Error Resume Next,在每个 method.For 示例的末尾带有错误句柄:

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

我的问题是,在旧代码中,如果不满足某些 If 语句,则会设置自定义错误 (Error 9999)。在函数末尾的错误句柄中,它检查错误是否不是 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,因为在我的整个代码中,抛出的异常并不总是相同的,因此为什么只抛出一个custom error 9999 可以一刀切使用,用于标记可以忽略的错误,然后你可以只捕获重要的错误。有什么方法可以 Throw New Exception(Id = 9999) 之类的吗?

您应该创建一个自定义异常并在您的 catch 中单独处理。 以下是有关如何创建自定义异常的一些示例: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