对空对象使用语句

在(可能)空对象上使用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 ,而且我不会得到一个NullReferenceException

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

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

在调用Dispose之前using扩展using检查对象是否为null ,所以是的,这是安全的。

在你的情况下,你会得到像这样的东西:

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

你应该可以吧:

 using ((IDisposable)null) { } 

这里抛出exception。

附注:不要把这个错误与foreachIEnumerable错误的地方抛出。

是的,在处置之前,引用将被空检查。 您可以通过在Reflector中查看您的代码来检查自己。

根据我的经验你不会得到空引用exception。 这将被简单地忽略。