在using语句中使用null IDisposable值

时间:2017-10-24 02:13:36

标签: c# null idisposable using-statement

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

using ((IDisposable)null) {
    Console.WriteLine("A");
}
Console.WriteLine("B");

null 值是否为using'允许'?如果是,它会在哪里记录?

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

如果/ since允许为null,则允许在中放置一个空值,而不是之前或之前。

C# Reference on Using未提及空值。

1 个答案:

答案 0 :(得分:6)

是的,允许空值。 C#5.0规范的§8.13,“使用声明”说:

  

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

然后,规范为表单

using语句提供以下扩展
using (ResourceType resource = expression) statement

resource是引用类型(dynamic除外):

{
    ResourceType resource = expression;
    try {
        statement;
    }
    finally {
        if (resource != null) ((IDisposable)resource).Dispose();
    }
}