如果在using语句中发生Exception,对象是否仍然会被处理

本文关键字:是否 对象 处理 Exception using 语句 如果 | 更新日期: 2023-09-27 18:15:59

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

我问的原因是因为我想决定是把一个try捕获在整个代码块周围还是在内部using语句中。请记住,在catch块内,某些异常会被重新抛出。

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

如果在using语句中发生Exception,对象是否仍然会被处理

会的。

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

等价于

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

编辑

在回答了这个问题之后,我在我的博客上写了一篇关于IDisposable和Using结构的更深入的文章。

是。using语句大致翻译为以下结构:

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

是的。这就像将代码包装在try-finally中(并在finally中进行处理)。

using语句生成了一个完整而适当的dispose模式,因此答案是肯定的。