Vb.net 如何使用On Error Goto复制try/catch/finally
假设在VB.NET中有:Vb.net 如何使用On Error Goto复制try/catch/finally,vb.net,Vb.net,假设在VB.NET中有: Try Debug.Print("Trying...") Catch ex as Exception throw new Exception("Exception", ex) Finally Debug.Print("Finally...") End Try 您将如何使用“On Error Goto”构造编写此代码?(请不要问我为什么要这样做,只是好奇是否可以做到) 无可奉告 Public Sub PleaseDontMakeMeDoThis()
Try
Debug.Print("Trying...")
Catch ex as Exception
throw new Exception("Exception", ex)
Finally
Debug.Print("Finally...")
End Try
您将如何使用“On Error Goto”构造编写此代码?(请不要问我为什么要这样做,只是好奇是否可以做到) 无可奉告
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
Public Sub PleaseDontMakeMeDoThis()
出错时继续下一步
Debug.Print(“正在尝试…”)
如果错误号为0,则
关于错误转到伪最终
打印(“异常…”)
如果结束
最后:
Debug.Print(“最终…”)
端接头
但在这种情况下,它只是在“catch块”中处理异常,而不是让调用代码处理它。简言之,我不认为有任何方法可以完全模仿尝试/捕获。如果有,微软就不需要替换VB的错误处理:)没有评论
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
Public Sub PleaseDontMakeMeDoThis()
出错时继续下一步
Debug.Print(“正在尝试…”)
如果错误号为0,则
关于错误转到伪最终
打印(“异常…”)
如果结束
最后:
Debug.Print(“最终…”)
端接头
但在这种情况下,它只是在“catch块”中处理异常,而不是让调用代码处理它。简言之,我不认为有任何方法可以完全模仿尝试/捕获。如果有,微软就不需要替换VB的错误处理:)给你:
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...")
给你:
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...")
不太正确,即使出现异常,最终也会执行抱歉,忘了下一个恢复。不会真正起作用,如果捕获被更改怎么办。。。请参阅更新的问题…不太正确,即使出现异常也会最终执行抱歉,忘记了下一个恢复。不会真正起作用,如果捕获被更改怎么办。。。请参阅更新的问题…如果捕获是“抛出新异常”(“Ha!”,ex),该怎么办。然后这就不起作用了。请参阅更新的问题…在错误处理程序代码中需要另一个错误处理程序。这需要大量的Goto。必须有一种方法来干净地执行此操作…Nope On Error Goto=mess等待获取messier。调用函数获取错误的唯一方法是将其传回(可能通过ByRef字段)。这就是为什么错误转到如此糟糕的原因(以及所有的转到或进程)。如果捕获是“抛出新异常”(“Ha!”,ex),该怎么办。那就不行了。请参阅更新的问题…错误处理程序代码中需要另一个错误处理程序。这是大量的Goto。必须有一种方法来干净地执行此操作…错误为Nope On Goto=mess等待获取messier。调用函数获取错误的唯一方法是将其传回(可能通过ByRef字段)。这就是为什么出错后的Goto如此糟糕(以及所有的Goto或course)。