【发布时间】:2013-09-25 16:22:30
【问题描述】:
我发现自己在为班级中的一个数据库对象这样做:
if (Db != null)
{
Db.Dispose();
Db = null;
}
几个问题……
- 我是否应该将 Db 对象设计为具有更短的寿命,等等
能把它放在
using块中吗? - 有没有一种通用的方法可以做到这一点,而不是写 3 行 每次我处理东西?
抛开这些不说,我感兴趣的是是否有可能发生类似的事情:
static void SafeDispose(ref IDisposable obj)
{
if (obj != null)
{
obj.Dispose();
obj = null;
}
}
【问题讨论】:
-
就像你提到的,如果对象实现了 IDisposible,你可以使用 using.对于数据库的东西,我建议你使用 using 语句。
-
是什么导致您避免使用 using 块?
-
这段代码是否在包含类的
Dispose()方法中?如果是这样,这个 SO 问题是在问同样的事情:Disposing the members that implement IDisposable。它有一个非常好的解决方案。此外,如果这是在Dispose()方法中,则无需设置Db = null;它没有任何好处。