对空对象使用语句
问题描述:
在(可能)空对象上使用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()
只要求非空对象:
+18
请注意,即使你的变量为null,using块也是如果你在using块中引用你的变量而没有先对它进行空值检查,你将会得到NullReferenceException。为了防止误解,这个答案应该说明:“是的,'Dispose()'只在非空对象上被调用”。 – surfen 2011-11-28 09:05:34
答
你应该确定它:
using ((IDisposable)null) { }
也不例外这里抛出。
备注:请不要将此错误与foreach
和IEnumerable
错误地抛出。
答
对using
的扩展在调用Dispose
之前检查对象是不是null
,所以是的,它是安全的。
你的情况,你会得到这样的:
IDisposable x = GetObject("invalid name");
try
{
// etc...
}
finally
{
if(x != null)
{
x.Dispose();
}
}
答
你不会得到空引用异常按我的经验。它将被简单地忽略。
答
是的,之前报废后的参考值将是空检查。您可以通过在Reflector中查看您的代码来检查自己。
我建议尝试一下......你已经得到了大部分你需要的代码 – cjk 2010-03-26 11:24:33
相关http://stackoverflow.com/questions/2513035 – 2010-03-26 11:37:31