【问题标题】:Java RuntimeException equivalent in C#?C# 中的 Java RuntimeException 等价物?
【发布时间】:2011-07-21 13:40:07
【问题描述】:

C# 是否有相当于 Java 的 java.lang.RuntimeException

(即不需要被捕获就可以抛出的异常,或者抛出异常时程序崩溃。)

【问题讨论】:

  • 不幸的是 .net 没有有用的异常层次结构。
  • 真正的问题:如果在没有被捕获的情况下不会使程序崩溃,那么异常有什么用??
  • Op 在 Java 中对 RuntimeException 的定义不太对。 RuntimeException 如果没有被捕获,将会使程序崩溃。与其他异常的不同之处在于您不需要在函数原型中声明throw 子句。它会更接近 C++runtime_error,即不应该发生的异常,但有时会在非常特殊的情况下发生,并且您不想费心在低级代码中处理它们。

标签: .net exception-handling c#-3.0 runtimeexception


【解决方案1】:

我认为不会。但是,你为什么想要一个?最有可能的是,您可以使用 .NET 系统的其他部分来实现您的目标。

【讨论】:

  • @leeand00:那真的应该是个例外吗..?或者其他一些模式,比如引发一个事件,并让任何人订阅该事件。除了例外,还有很多其他模式可以做到这一点。
【解决方案2】:

在 .NET 中,如果发生未处理的异常,程序流程将失败; Windows 应用程序将放弃,而 ASP.NET 应用程序将一直冒泡到 Global.asax 的 Application_Error 处理程序。

在这方面,没有。但是,也许您可​​以包含一个您正在尝试做的事情的示例,我们可以提供有关模式或方法的建议,以便为您提供解决方案。

【讨论】:

    【解决方案3】:

    .NET 没有完全类似的东西,但你可以在某种程度上模拟它。您可以,但许多人不建议将应用程序的入口点包装在一个 try/catch 中,然后捕获您正在寻找的异常,然后将其吞下。如果有更近的东西抓住它,那就太好了。

    这是以某些方式构建的,例如 WPF 中的DispatcherUnhandledException 事件;您可以处理该事件,并设置DispatcherUnhandledExceptionEventArgs.Handled = true 以保持应用程序运行。

    一般来说,我不推荐这种模式。请改用Trace.WriteLine,如果需要,请编写一个 Trace 侦听器。请记住:例外是例外。发生了一些非同寻常的事情,这意味着最好停止应用程序而不是在不可预测的状态下继续。

    【讨论】:

      【解决方案4】:

      SystemException 是等价的,它是 .NET 代码可以引发的所有异常的基类。与应用程序异常相反。

      但是,从 cmets 看来,您想捕获此异常。在这种情况下,你应该永远使用 SystemException,你会捕获太多。创建您自己的异常类,从 Exception 派生。

      .NET 中没有异常规范,以防万一您要这样做。

      【讨论】:

      • 好吧,这就是我所做的。我从 Exception 派生了它,但我不完全确定它在 C# 中是如何工作的。谢谢!
      • 我是 C# 新手。在 Java 中,运行时异常通常不会被捕获。这是因为运行时异常的目的是表示某种致命的编程错误。 (如果是桌面应用程序,最好使用自己的UncaughtExceptionHandler 通知用户错误然后终止应用程序。)在C# 中,可以使用Debug.Assert,但只能在调试模式下使用。
      • 这没有什么不同。 .NET 中的 AppDomain.UnhandledException
      【解决方案5】:
      1. C# does not have checked exceptions.

      2. this list 中选择最合适的例外。

      【讨论】:

        猜你喜欢
        • 2018-05-17
        • 2014-08-29
        • 1970-01-01
        • 2010-11-19
        • 2010-10-24
        • 1970-01-01
        • 2014-11-22
        • 1970-01-01
        • 2011-04-25
        相关资源
        最近更新 更多