私がこれを言うとき
using (Entities db = new Entities())
{
return db.TableName.AsQueryable().ToList();
}
何かを返すのでusingブロックの機能をバイパスし、usingブロックを終了する前にメソッドが終了するので、usingブロックはその目的を果たせず、リソースを破棄しないと思います。
これは正しいです?
私がこれを言うとき
using (Entities db = new Entities())
{
return db.TableName.AsQueryable().ToList();
}
何かを返すのでusingブロックの機能をバイパスし、usingブロックを終了する前にメソッドが終了するので、usingブロックはその目的を果たせず、リソースを破棄しないと思います。
これは正しいです?
あなたは間違っています。廃棄されます。
ステートメントは、ブロック内の元のオブジェクトを破棄する/ブロックusing
にコンパイルされます。ブロック内のコードが値を返したり、例外をスローしたりした場合でも、ブロックは常に実行されます。try
finally
finally
finally
try
using
ステートメントはDispose
、値が返される前にdbオブジェクトを呼び出します。
いいえ、usingブロックはDisposeオブジェクトの起動を強制します。
http://www.devx.com/dotnet/Article/33167
http://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx
usingステートメントは確かに成功します。これは次のようなものです(これは、C#コンパイラがusingステートメントを次のように変換するものです。
Entities db = new Entities();
try
{
return db.TableName.AsQueryable().ToList();
}
finally
{
((IDisposable)db).Dispose();
}