使用空的IDisposable值与using语句。

15
以下代码在执行时不会产生错误:
using ((IDisposable)null) {
    Console.WriteLine("A");
}
Console.WriteLine("B");

使用中的null值是否被允许?如果是,这在哪里有记录?

我看到的大部分C#代码都会创建一个“虚拟/空操作”IDisposable对象——需要一个非空的可释放对象吗?曾经有过这种需要吗?

如果/既然允许使用null,则可以将null保护符放置在using语句内部,而不是在之前或周围。

C# Using参考文档没有提到空值。


2
{btsdaf} - Alexei Levenkov
{btsdaf} - user2864740
1个回答

24

是的,允许使用null值。C# 5.0规范的§8.13,“using语句”中写道:

如果获取到一个null资源,则不会调用Dispose方法,也不会抛出异常。

然后规范为形如以下using语句提供了以下扩展:

using (ResourceType resource = expression) statement

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

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

1
{btsdaf} - Alexei Levenkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接