如果在 using 语句中发生异常,该对象是否仍会被释放?
我问的原因是因为我试图决定是在整个代码块周围还是在内部 using 语句中放置 try catch 。请记住,catch 块中的设计会重新引发某些异常。
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();
}
是的,确实如此。这就像将代码包装在 try-finally 中(并在 finally 中进行处理)。
using
语句会导致生成完整且正确的dispose
模式,所以答案是肯定的。
这两个对象都不会被丢弃。检查下面的小提琴。