我正在开发一个涉及大量Sql对象的类 - 连接(Connection), 命令(Command), 数据适配器(DataAdapter), 命令生成器(CommandBuilder)等。我们有多个实例需要处理这样的代码:
if( command != null )
{
command.Dispose();
}
if( dataAdapter != null )
{
dataAdapter.Dispose();
}
etc
我知道这个问题的复制并不充分,但它已经开始有异味了。我认为出现异味的原因是,在某些情况下该对象也被设置为空(null)。
if( command != null )
{
command.Dispose();
command = null;
}
如果可能的话,我希望能够消除重复代码。我已经想出了这个通用的方法来处理对象并将其设置为null。
private void DisposeObject<TDisposable>( ref TDisposable disposableObject )
where TDisposable : class, IDisposable
{
if( disposableObject != null )
{
disposableObject.Dispose();
disposableObject = null;
}
}
我的问题是...
- 这个通用函数是否不好的想法?
- 把对象设置为
null
是否必要?
编辑:
我知道 using
语句,但由于某些成员变量需要比一个调用更长时间地存在,因此我不能总是使用它。例如连接和事务对象。
谢谢!