在使用块中抛出异常时,资源是否被处理?

27
4个回答

43
使用using语句定义的资源将被释放,这也是using语句的主要优点。

using语句确保在调用对象方法时即使发生异常也会调用Dispose。你可以通过将对象放入try块中并在finally块中调用Dispose来实现相同的结果;事实上,这就是编译器如何将using语句转换的方式。
http://msdn.microsoft.com/en-us/library/yh598w02%28v=VS.100%29.aspx


1
+1 指向说明的链接并比我快 15 秒。;-) - Fischermaen
谢谢!只需等待计时器接受答案 :) - Dot NET

4
是的,使用块中的资源将被释放。

1

你不需要这样做。实际上,如果你在 finally 块中使用 Dispose 方法调用的 try{}catch{}finally{} 结构,那么它与 using 块是相同的。因此,无论如何都会被调用。


1

是的,元素将被处理掉,因为该调用是finally块的一部分,而using被转换为try中。

根据C#规范8.13:

使用语句被翻译成三个部分:获取、使用和处理。资源的使用隐式地包含在包括 finally 子句的 try 语句中。这个 finally 子句会释放该资源。如果获取的资源为空,则不会调用 Dispose,也不会抛出异常。

所以您不需要手动处理它,而且我对您自己的catch块在此情况下的位置并不确定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接