如果在使用语句中发生exception,该对象是否仍然被处置?

如果在使用语句中发生exception,该对象是否仍然被处置?

我之所以问,是因为我试图决定是否试图抓住整个代码块或内部使用语句。 考虑到某些例外情况正在重新devise的捕捞区内进行devise。

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

是他们会。

 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(); } 

是的,它确实。 这就像包装你的代码(最后放置)。

using语句会导致生成完整和正确的dispose模式,所以答案是肯定的。