可能重复:
Does Dispose method still get called when Exception is thrown inside of Using statment?
访问数据库时,我有许多using
块。我想知道 - 如果必须在使用块中抛出异常,是否仍然会处理必要的资源,即使未到达块的末尾?或者我需要在catch
区块中手动关闭它们吗?
答案 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
块会在哪里。