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

use*_*635 7 c# dispose idisposable

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

有这个:

HttpWebResponse a = ....;  
Run Code Online (Sandbox Code Playgroud)

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

a.Dispose(); 
Run Code Online (Sandbox Code Playgroud)

要么:

if (a!= null)
    a.Dispose();  
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*mes 12

通常建议IDisposableusing语句包装任何实现的东西

using (var a = new HttpWebResponse(...))
{
}
Run Code Online (Sandbox Code Playgroud)

这相当于写作

var a = new HttpWebResponse(...);
try
{
   // use a
}
finally
{
    if (a != null)
        a.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

我是否应该关心对象是否为空?不管怎样我也不能处理它

好吧不,因为如果你试图调用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();
Run Code Online (Sandbox Code Playgroud)

然后,允许您在null对象上调用该方法.