2010-03-29 7 views
10

Als ich die.NET mit Block und zurück; Stichwort

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

sage ich By-pass die Funktionalität des Block verwendet wird, da ich etwas zurückgeben, und das Verfahren beendet, bevor die Verwendung von Block austritt, so dass ich denke, dass die Verwendung von Block nicht dienen wird auf seinen Zweck und entsorgen Sie die Ressource.

Ist das korrekt?

Antwort

15

Sie sind falsch; es wird entsorgt werden.

Die using Anweisung kompiliert zu einem try/finally Block, der das ursprüngliche Objekt in dem finally Block verfügt.
finally Blöcke sind immer ausgeführt, auch wenn der Code innerhalb der try Block einen Wert zurückgegeben oder eine Ausnahme ausgelöst.

+0

Danke :) Ich habe Angst, dass mein Code würde Spaß –

+2

gemacht wird schließlich Block nicht immer * * Ausführen;) http://thedailywtf.com/Comments/My-Tales.aspx – R0MANARMY

+0

Uhm ok yeap. Ich klickte :) –

3

using Anweisung wird Dispose von DB-Objekt vor Wert zurückrufen.

1

Ihre using-Anweisung wird in der Tat gelingen. Es ist verwandt mit dem folgenden (das, was der Compiler C# ist die Anweisung using in wird übersetzen:

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