我有一个对象,例如HttpWebResponse
,它实现IDisposable
,因此应该被处置。
有这个:
HttpWebResponse a = ....;
处理对象的正确方法是什么?
a.Dispose();
或者:
if (a!= null)
a.Dispose();
我什至应该关心对象是否为空?我就不能直接丢弃它吗?
我有一个对象,例如HttpWebResponse
,它实现IDisposable
,因此应该被处置。
有这个:
HttpWebResponse a = ....;
处理对象的正确方法是什么?
a.Dispose();
或者:
if (a!= null)
a.Dispose();
我什至应该关心对象是否为空?我就不能直接丢弃它吗?
通常建议包装使用 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();
这将允许您在空对象上调用该方法。
首先检查它是否不为空然后处理,否则你当然会得到一个异常。