使用带有null对象的语句

Pao*_*sco 168 c# idisposable using

using在(可能)null对象上使用该语句是否安全?
请考虑以下示例:

class Test {
    IDisposable GetObject(string name) {
        // returns null if not found
    }

    void DoSomething() {
        using (IDisposable x = GetObject("invalid name")) {
            if (x != null) {
                 // etc...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否保证Dispose只有在对象不为空时才会被调用,而且我不会得到一个NullReferenceException

rek*_*o_t 162

是的,Dispose()仅在非null对象上调用:

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

  • 请注意,即使您的变量为null,也会执行using块,如果您在using块中引用变量而不先对其进行空值检查,则会得到NullReferenceException.为了防止误解,这个答案应该说:"是的,`Dispose()`只在非空对象上调用". (28认同)

Joã*_*elo 32

在调用之前using检查对象的扩展,所以是的,它是安全的.nullDispose

在你的情况下你会得到类似的东西:

IDisposable x = GetObject("invalid name");
try
{
    // etc...
}
finally
{
    if(x != null)
    {
        x.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 13

你应该没问题:

using ((IDisposable)null) { }
Run Code Online (Sandbox Code Playgroud)

这里没有例外.

附注:不要误以为这foreachIEnumerable其中一个异常将被抛出.