对空对象使用语句
在(可能)空对象上使用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()
:
在调用Dispose
之前using
扩展using
检查对象是否为null
,所以是的,这是安全的。
在你的情况下,你会得到像这样的东西:
IDisposable x = GetObject("invalid name"); try { // etc... } finally { if(x != null) { x.Dispose(); } }
你应该可以吧:
using ((IDisposable)null) { }
这里抛出exception。
附注:不要把这个错误与foreach
和IEnumerable
错误的地方抛出。
是的,在处置之前,引用将被空检查。 您可以通过在Reflector中查看您的代码来检查自己。
根据我的经验你不会得到空引用exception。 这将被简单地忽略。