estoy trabajando en una clase que se ocupa de una gran cantidad de objetos de SQL - Conexión, Comando, adaptador de datos, CommandBuilder, etc Hay varias instancias en las que tenemos un código como éste:función genérica para manejar desechar objetos IDisposable
if(command != null)
{
command.Dispose();
}
if(dataAdapter != null)
{
dataAdapter.Dispose();
}
etc
Sé que esto es bastante insuficiente en términos de duplicación, pero ha comenzado a oler. La razón por la que creo que huele es porque en algunos casos el objeto también se establece en nulo.
if(command != null)
{
command.Dispose();
command = null;
}
Me gustaría deshacerme de la duplicación si es posible. He encontrado este método genérico para deshacerse de un objeto y establecerlo como nulo.
private void DisposeObject<TDisposable>(ref TDisposable disposableObject)
where TDisposable : class, IDisposable
{
if(disposableObject != null)
{
disposableObject.Dispose();
disposableObject = null;
}
}
Mis preguntas son ...
- ¿Es esta función genérica una mala idea?
- ¿Es necesario establecer el objeto en
null
?
EDIT:
Soy consciente de la declaración using
, sin embargo, no siempre se puede usar porque tengo algunas variables miembro que deben persistir durante más tiempo de una llamada. Por ejemplo, los objetos de conexión y transacción.
Gracias!
No puedo usar la instrucción 'using' para la mayoría de mis casos. He actualizado mi pregunta. –
@Jerod: He actualizado mi respuesta para que coincida. –