即使在使用块中抛出异常,资源也会被丢弃吗?

时间:2011-11-23 12:04:23

标签: c# asp.net .net exception-handling using-statement

  

可能重复:
  Does Dispose method still get called when Exception is thrown inside of Using statment?

访问数据库时,我有许多using块。我想知道 - 如果必须在使用块中抛出异常,是否仍然会处理必要的资源,即使未到达块的末尾?或者我需要在catch区块中手动关闭它们吗?

4 个答案:

答案 0 :(得分:28)

使用using语句定义的资源已被处理,这是using有利的主要原因。

  

using语句确保Dispose被称为,即使是   在对象上调用方法时发生异常。您可以   通过将对象放在try块中来实现相同的结果   然后在finally块中调用Dispose;其实这是怎么回事   using语句由编译器翻译   http://msdn.microsoft.com/en-us/library/yh598w02%28v=VS.100%29.aspx

答案 1 :(得分:1)

是的,将处理使用块的资源。

答案 2 :(得分:1)

你不会。实际上,如果在finally块中使用带有Dispose方法调用的using构造,则try{}catch{}finally{}块是相同的。所以它无论如何都会被调用。

答案 3 :(得分:1)

是的,该元素将被处理掉,因为该调用是finally转换为try的{​​{1}}块的一部分。

从C#规范的8.13开始:

  

使用声明分为三个部分:获取,使用,   和处置。资源的使用隐含在try中   包含finally子句的语句。这个最终条款处理   资源。如果获取了空资源,则不调用   处理完成后,不会抛出任何异常。

所以你不需要手动处理它,而且我不确定在这种情况下你自己的using块会在哪里。