我有很多连接数据库的 using
块。我想知道,在 using 块内部发生异常时,必要的资源是否会被处理,即使没有达到块的结尾?还是我需要在 catch
块中手动关闭它们?
我有很多连接数据库的 using
块。我想知道,在 using 块内部发生异常时,必要的资源是否会被处理,即使没有达到块的结尾?还是我需要在 catch
块中手动关闭它们?
using
语句定义的资源将被释放,这也是using
语句的主要优点。
using
语句确保在调用对象方法时即使发生异常也会调用Dispose。你可以通过将对象放入try块中并在finally块中调用Dispose来实现相同的结果;事实上,这就是编译器如何将using
语句转换的方式。
http://msdn.microsoft.com/en-us/library/yh598w02%28v=VS.100%29.aspx
你不需要这样做。实际上,如果你在 finally
块中使用 Dispose
方法调用的 try{}catch{}finally{}
结构,那么它与 using
块是相同的。因此,无论如何都会被调用。
是的,元素将被处理掉,因为该调用是finally
块的一部分,而using
被转换为try
中。
根据C#规范8.13:
使用语句被翻译成三个部分:获取、使用和处理。资源的使用隐式地包含在包括 finally 子句的 try 语句中。这个 finally 子句会释放该资源。如果获取的资源为空,则不会调用 Dispose,也不会抛出异常。
所以您不需要手动处理它,而且我对您自己的catch
块在此情况下的位置并不确定。