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

And*_*rew 48 c# exception-handling using try-catch

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

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

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

And*_*bel 48

是他们会.

using(SPWeb spWeb = spSite.OpenWeb())
{
  // Some Code
}
Run Code Online (Sandbox Code Playgroud)

相当于

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

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

编辑

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


spe*_*der 8

是.一个using语句转换为大约下面的结构:

IDisposable x;
try
{
    ...
}
finally
{
    x.Dispose();
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*ert 6

是的,它确实.这就像在try-finally中包装你的代码(并在finally中处理).