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 等价物?的主要内容,如果未能解决你的问题,请参考以下文章
WebView 中的“android.view.InflateException: Binary XML file Error inflating class”错误
c# 中的 readInt16() 与 java 中的 readShort()