Will Dispose() be called in a using statement with a null object?
Is it safe to use the using
statement on a (potentially) null object?
Consider the following example:
class Test {
IDisposable GetObject(string name) {
// returns null if not found
}
void DoSomething() {
using (IDisposable x = GetObject("invalid name")) {
if (x != null) {
// etc...
}
}
}
}
Is it guaranteed that Dispose
will be called only if the object is not null, and I will not get a NullReferenceException
?
Yes, Dispose()
is only called on non-null objects:
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
The expansion for using
checks that the object is not null
before calling Dispose
on it, so yes, it's safe.
In your case you would get something like:
IDisposable x = GetObject("invalid name");
try
{
// etc...
}
finally
{
if(x != null)
{
x.Dispose();
}
}