将在具有空对象的using语句中调用Dispose()吗?


178

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

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

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

是否保证Dispose仅在对象不为null且不会得到的情况下才调用该方法NullReferenceException


Answers:



36

扩展用于在调用using对象null之前检查该对象是否不在Dispose,因此是的,它是安全的。

在您的情况下,您将获得以下信息:

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


1

是的,在处理引用之前,将对null进行检查。您可以通过在Reflector中查看代码来检查自己。


-3

根据我的经验,您不会获得空引用异常。它将被简单地忽略。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.