.NET有一个类似于Delphi的EAbort的异常吗?

Sak*_*ake 3 .net delphi exception

.NET有一个类似于Delphi的EAbort的异常吗?

目前,我定义了自己的"AbortProcess"继承Exception.与忽略"AbortProcess"的My.Application.UnhandledException处理程序一起,我仍然想知道.NET中是否存在类似的机制.

Class AbortProcess
    Inherits System.Exception
End Class

Sub Abort()
    Throw New AbortProcess()
End Sub

Sub AppDomain_UnhandledException(ByVal sender As Object, ByVal e As ApplicationServices.UnhandledExceptionEventArgs)
    If TypeOf e.Exception Is AbortProcess Then
        e.ExitApplication = False
    End If
End Sub    

Sub PerformActions()
    Action1()
    If Not Action2() Then
        Abort()
    End If
    Action3()
    ...
End Sub
Run Code Online (Sandbox Code Playgroud)

典型的.NET开发人员如何处理这个用例?

更新:

不幸的是,由于某些原因,一些人在没有发表任何评论的情况下投票支持这个问题.我能弄清楚的唯一原因是他们可能认为异常永远不应该被用来控制程序流程; 我倾向于同意这一点.但是,我最近研究了ANTLR并发现它们确实使用自定义Exception(RecognitionException)作为控制流构造.结合Python的StopIteration用法,我相信使用Exception作为控制流构造实际上已经被广泛使用.它只是没有像Delphi VCL那样标准化.

Rob*_*edy 5

定义Delphi的EAbort异常类有两个特质.

  1. IDE预先配置为在检测到引发该类的异常时不会中断程序.
  2. 主应用程序异常处理程序识别EAbort及其后代,并在捕获此类异常时不显示常用消息框.

看起来你提出的代码完成了第二部分.您可以为第一部分配置Visual Studio; 请参阅另一个Stack Overflow问题的答案,有没有更好的方法让Visual Studio在调试模式下忽略try/catch?我不知道已经为此指定了任何异常类.

EAbort异常旨在使程序停止运行它正在运行的任何事件或消息处理程序,并在主消息循环中继续.但是,为了使其真正起作用,需要编写所有其他代码以正确处理异常.也就是说,他们需要使用finally部分来保持自己处于稳定和一致的状态,并且他们需要重新抛出或从不捕获他们实际上无法修复的异常.