在using语句中使用null IDisposable值

use*_*740 2 c# null idisposable using-statement

以下代码在执行时不会产生错误:

using ((IDisposable)null) {
    Console.WriteLine("A");
}
Console.WriteLine("B");
Run Code Online (Sandbox Code Playgroud)

是'允许' 的using如果是这样,它在哪里记录?

我见过的大多数C#代码都会创建一个"dummy/NOP"IDisposable对象 - 是否特别需要非null的Disposable对象?有没有?

如果/因为空是允许的,它允许将一个空后卫 using语句来之前或周围的反对.

使用C#Reference没有提到空值.

Mic*_*Liu 7

是的,允许空值.C#5.0规范的第8.13节"使用声明"说:

如果null获取了资源,则不会进行任何调用Dispose,也不会抛出任何异常.

然后,规范为using表单声明提供以下扩展

using (ResourceType resource = expression) statement
Run Code Online (Sandbox Code Playgroud)

when resource是引用类型(除了dynamic):

{
    ResourceType resource = expression;
    try {
        statement;
    }
    finally {
        if (resource != null) ((IDisposable)resource).Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)