C# 中的 Java RuntimeException 等价物?

Posted

技术标签:

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

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

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

【问题讨论】:

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

    C# does not have checked exceptions.

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

【讨论】:

以上是关于C# 中的 Java RuntimeException 等价物?的主要内容,如果未能解决你的问题,请参考以下文章

使用 log4j 在 Java 中记录运行时异常

WebView 中的“android.view.InflateException: Binary XML file Error inflating class”错误

Java异常之checked与unchecked

c# 中的 readInt16() 与 java 中的 readShort()

Lottie Android Studio 错误 Appcompat

C#和Java中的加密方法