假设在 VB.NET 中你有:
Try
Debug.Print("Trying...")
Catch ex as Exception
throw new Exception("Exception", ex)
Finally
Debug.Print("Finally...")
End Try
您将如何使用“On Error Goto”结构编写此代码?(请不要问我为什么要这样做,只是好奇是否可以这样做)。
假设在 VB.NET 中你有:
Try
Debug.Print("Trying...")
Catch ex as Exception
throw new Exception("Exception", ex)
Finally
Debug.Print("Finally...")
End Try
您将如何使用“On Error Goto”结构编写此代码?(请不要问我为什么要这样做,只是好奇是否可以这样做)。
干得好:
On Error Goto ErrHandler
Debug.Print("Trying...")
Goto Finish
ErrHandler:
Debug.Print("Exception...")
On Error Goto ErrHandler2
Debug.Print("Throwing another error, I guess...")
Goto Finish2
ErrHandler2:
Debug.Print("Exception 2...")
Finish2:
Debug.Print("Finally 2...")
Finish:
Debug.Print("Finally...")
没有意见...
Public Sub PleaseDontMakeMeDoThis()
On Error Goto ExceptionHandler
Debug.Print("Trying...")
Debug.Print("Finally...")
Exit Sub
ExceptionHandler:
Debug.Print("Exception...")
Resume Next
End Sub
唯一的区别是,如果在 try/catch 中,在 catch 中抛出了异常,那么 finally 仍然会被处理。我不确定你如何让它也处理它。我想你可以这样做:
Public Sub PleaseDontMakeMeDoThis()
On Error Resume Next
Debug.Print("Trying...")
If Err.Number <> 0 Then
On Error GoTo PseudoFinally
Debug.Print("Exception...")
End If
PseudoFinally:
Debug.Print("Finally...")
End Sub
但在这种情况下,它只是在“catch 块”中吃掉异常,而不是让调用代码处理它。简而言之,我认为无论如何都不能完全模仿 try/catch。如果有的话,微软就不需要替换 VB 的错误处理了 :)