我正在将一些vb6
代码更新为vb.net
。此旧代码中的错误处理使用On Error GoTo
或On 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
,有点像?
答案 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