Я работаю над классом, который имеет дело с большим количеством объектов 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
?
EDIT:
Я знаю инструкцию using
, но я не могу ее всегда использовать, потому что у меня есть некоторые переменные-члены, которые должны сохраняться дольше, чем один вызов. Например, объекты соединения и транзакции.
Спасибо!