如果在using语句中发生异常,该对象是否仍然处理?

时间:2011-11-29 11:20:51

标签: c# exception-handling try-catch using

如果在using语句中发生异常,该对象是否仍然处理?

我问的原因是因为我试图决定是否在整个代码块或内部使用语句中进行尝试。请记住,在捕获区内设计会重新抛出某些例外情况。

using (SPSite spSite = new SPSite(url))
{
   // Get the Web
   using (SPWeb spWeb = spSite.OpenWeb())
   {
       // Exception occurs here
   }
}

4 个答案:

答案 0 :(得分:46)

是的,他们会。

using(SPWeb spWeb = spSite.OpenWeb())
{
  // Some Code
}

相当于

{
  SPWeb spWeb = spSite.OpenWeb();
  try
  {

    // Some Code
  }
  finally
  {
    if (spWeb != null)
    {
       spWeb.Dispose();
    }
  }
}

修改

在回答这个问题之后,我在博客中写了一篇关于IDisposable and Using构造的更深入的帖子。

答案 1 :(得分:8)

是。 using语句转换为大致以下结构:

IDisposable x;
try
{
    ...
}
finally
{
    x.Dispose();
}

答案 2 :(得分:6)

是的。这就像在try-finally中包装你的代码(并在最后处理)。

答案 3 :(得分:2)

using语句会生成完整且正确的dispose模式,因此答案是肯定的。