2010-03-29 12 views
10

quando dico questo.NET utilizzando blocco e ritorno; parola chiave

using (Entities db = new Entities()) 
{ 
    return db.TableName.AsQueryable().ToList(); 
} 

faccio a by-passare la funzionalità di utilizzare blocchi da quando torno qualcosa, e il metodo termina prima di uscire il blocco utilizzando, quindi penso che il blocco utilizzando non servirà al suo scopo e disporre la risorsa.

È corretto?

risposta

15

Non sei corretto; it sarà smaltito.

Il using dichiarazione compila ad un blocco try/finally che dispone l'oggetto originale nel blocco finally.
finally I blocchi sono sempre eseguiti, anche se il codice all'interno del blocco try ha restituito un valore o ha generato un'eccezione.

+0

Grazie :) Avevo paura che il mio codice sarebbe stato preso in giro –

+2

Infine blocco non lo fa sempre * * eseguire;) http://thedailywtf.com/Comments/My-Tales.aspx – R0MANARMY

+0

Uhm ok yeap. Ho cliccato :) –

3

using l'istruzione chiamerà Dispose di oggetto db prima che il valore torni.

1

tua istruzione using avrà davvero successo. E 'simile al seguente (che è ciò che il compilatore C# tradurrà l'istruzione using in:

Entities db = new Entities(); 
try 
{ 
    return db.TableName.AsQueryable().ToList(); 
} 
finally 
{ 
    ((IDisposable)db).Dispose(); 
}