Sto lavorando su una classe che si occupa di un sacco di oggetti SQL - Connessione, Comando, DataAdapter, CommandBuilder, ecc Ci sono più istanze in cui abbiamo il codice come questo:funzione generica per gestire lo smaltimento di oggetti IDisposable
if(command != null)
{
command.Dispose();
}
if(dataAdapter != null)
{
dataAdapter.Dispose();
}
etc
So che questo è abbastanza insufficiente in termini di duplicazione, ma ha iniziato a puzzare. Il motivo per cui penso che odori è perché in alcuni casi anche l'oggetto è impostato su null.
if(command != null)
{
command.Dispose();
command = null;
}
Mi piacerebbe eliminare la duplicazione, se possibile. Sono arrivato con questo metodo generico per smaltire un oggetto e impostarlo su null.
private void DisposeObject<TDisposable>(ref TDisposable disposableObject)
where TDisposable : class, IDisposable
{
if(disposableObject != null)
{
disposableObject.Dispose();
disposableObject = null;
}
}
Le mie domande sono ...
- È questo funzione generica una cattiva idea?
- È necessario impostare l'oggetto su
null
?
EDIT:
Sono consapevole della dichiarazione using
, comunque non posso sempre usarlo perché ho alcune variabili membro che hanno bisogno di persistere più a lungo di una chiamata. Ad esempio la connessione e gli oggetti della transazione.
Grazie!
Non sono in grado di utilizzare l'istruzione 'using' per la maggior parte dei miei casi. Ho aggiornato la mia domanda. –
@Jerod: ho aggiornato la mia risposta per corrispondere. –