11

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

有这个:

HttpWebResponse a = ....;  

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

a.Dispose(); 

或者:

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

我什至应该关心对象是否为空?我就不能直接丢弃它吗?

4

2 回答 2

16

通常建议包装使用 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();

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

于 2013-06-30T12:16:24.483 回答
0

首先检查它是否不为空然后处理,否则你当然会得到一个异常。

于 2013-06-30T12:17:21.827 回答