不处理异常是一个更好的主意

use*_*291 5 c# exception-handling

1)

1 - 只处理您实际可以做的事情,
2 - 您无法对绝大多数例外做任何事情

a)我假设“By not handling an exception”文本建议我们应该让异常冒泡到堆栈中,运行时将中止我们的应用程序?!

b)但是为什么让运行时中止异常优先于捕获异常,记录它然后通知用户失败?只有两者之间的区别在于,在后一种情况下,应用程序不会中止

例如,如果数据库出现故障,为什么整个程序崩溃(由于没有处理异常),如果我们可以捕获异常,记录它并通知用户失败,那样我们就可以保持程序正常运行

2)如果您知道某些代码块可能引发的异常无法处理,您是否应该在try-finally块中包含此代码,或者最好将其保留在任何try-finally块之外?

谢谢

Mar*_*ers 8

不,指南不是为了捕获您无法做任何事情的例外,除非在您的应用程序或线程的顶层.

您应该尽量避免让应用程序崩溃 - 在某处记录信息,向用户说明解释发生的事情,并告诉他们如何向您报告错误.也许还尝试将未保存的数据保存在恢复文件中,以便下次应用程序启动时可以提供尝试恢复丢失的工作的选项.


Jon*_*tes 2

尝试这样看...数据库崩溃了。你怎么知道?因为你遇到超时/异常/其他情况。但您的应用程序可能没有遇到异常。ADO.NET/Linq to SQL/Entity Framework/无论您使用什么数据提供程序,实际上都会获取异常并将其抛出到您的应用程序。对我来说,这就是该建议的建议:作为组件设计者,更愿意抛出您无能为力的异常。

对于数据库关闭的示例,ADO.NET 数据提供程序可以做什么?它可以使服务器恢复吗?修复网络连接?重置权限?不。所以它不处理异常,而是抛出异常。

您引用的指南适用于组件开发,而不是运行时边界(线程或应用程序)的外边缘。在这个级别上,决定如何处理已经冒出的异常是正确的。