If an Exception happens within a using statement does the object still get disposed?
If an Exception happens within a using statement does the object still get disposed?
The reason why I'm asking is because I'm trying to decide on whether to put a try caught around the whole code block or within the inner using statement. Bearing in mind certain exceptions are being re-thrown by design within the catch block.
using (SPSite spSite = new SPSite(url))
{
// Get the Web
using (SPWeb spWeb = spSite.OpenWeb())
{
// Exception occurs here
}
}
Solution 1:
Yes, they will.
using(SPWeb spWeb = spSite.OpenWeb())
{
// Some Code
}
is equivalent to
{
SPWeb spWeb = spSite.OpenWeb();
try
{
// Some Code
}
finally
{
if (spWeb != null)
{
spWeb.Dispose();
}
}
}
Edit
After answering this question, I wrote a more in depth post about the IDisposable and Using construct in my blog.
Solution 2:
Yes. A using
statement translates to approximately the following construct:
IDisposable x;
try
{
...
}
finally
{
x.Dispose();
}
Solution 3:
Yes it does. It's like wrapping your code in a try-finally (and disposing in the finally).
Solution 4:
The using
statement causes a complete and proper dispose
pattern to be generated, so the answer is yes.