.NET SqlConnection.Dispose()可以抛出异常吗?

not*_*not 2 .net sql dispose unmanaged exception

对象的Dispose方法是否可能SqlConnnection抛出异常?它始终显示自己坐在try-catch外面的finally块中.如果一个using块等同于一个try...finally然后调用的Dispose那个,那么当抛出异常时Dispose也会出现问题.

D S*_*ley 5

从技术上讲它可以,但它不应该:

CA1065:不要在意外位置引发异常:

一个IDisposable.Dispose方法不应该抛出异常.Dispose通常在finally子句中称为清理逻辑的一部分.因此,显式抛出异常会Dispose强制用户在finally子句中添加异常处理.该Dispose(false)代码路径不应该抛出异常,因为这几乎总是从一个终结调用.

处理注意事项和注意事项:

不要在Dispose中抛出异常.调用Dispose的对象什么都不应该出错.

故事的寓意似乎是抛出的异常Dispose是一件非常糟糕的事情(由于你提到的一些原因)并且应该尽可能高地处理(你无能为力,也许无法恢复)从中).

  • 这可能会泛滥太多 - 我确信.NET库可以引发异常,但你打算怎么做呢?除非你可以做一些不同的事情来处理它,否则抓住异常没什么意义.你可能不能继续,好像什么都没有出错(至少不是那个级别). (2认同)