在dispose()命令之前,是否需要检查对象是否为null?

时间:2013-06-30 12:14:54

标签: c# dispose idisposable

我有一个实现HttpWebResponse的对象,例如IDisposable,因此应该被处理掉。

有这个:

HttpWebResponse a = ....;  

处理对象的正确方法是什么?

a.Dispose(); 

或者:

if (a!= null)
    a.Dispose();  

我是否应该关心对象是否为空?不管怎样我不能处理它?<​​/ p>

2 个答案:

答案 0 :(得分:10)

通常建议用using语句包装任何实现IDisposable的内容

using (var a = new HttpWebResponse(...))
{
}

这相当于写作

var a = new HttpWebResponse(...);
try
{
   // use a
}
finally
{
    if (a != null)
        a.Dispose();
}
  

我是否应该关心对象是否为空?我无论如何都不能处理它

嗯不,因为如果您尝试在Dispose对象上调用null,应用程序将抛出NullReferenceException。鉴于您认为using语句不是有效选项的情况,另一种整理方式是编写扩展方法,例如。

public static class Ext
{
    public static void SafeDispose(this object obj)
    {
        if (obj != null)
            obj.Dispose();
    }
}
...
var a = new ...;
a.SafeDispose();

然后允许您在空对象上调用该方法。

答案 1 :(得分:0)

首先检查它是否为空然后处置,否则你会得到一个例外。