10

私がこれを言うとき

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

何かを返すのでusingブロックの機能をバイパスし、usingブロックを終了する前にメソッドが終了するので、usingブロックはその目的を果たせず、リソースを破棄しないと思います。

これは正しいです?

4

4 に答える 4

15

あなたは間違っています。廃棄されます

ステートメントは、ブロック内の元のオブジェクトを破棄する/ブロックusingにコンパイルされます。ブロック内のコードが値を返したり、例外をスローしたりした場合でも、ブロックは常に実行されます。tryfinallyfinally
finallytry

于 2010-03-29T18:27:45.793 に答える
3

usingステートメントはDispose、値が返される前にdbオブジェクトを呼び出します。

于 2010-03-29T18:28:27.307 に答える
1

いいえ、usingブロックはDisposeオブジェクトの起動を強制します。

http://www.devx.com/dotnet/Article/33167

http://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx

于 2010-03-29T18:29:20.493 に答える
1

usingステートメントは確かに成功します。これは次のようなものです(これは、C#コンパイラがusingステートメントを次のように変換するものです。

Entities db = new Entities();
try
{
    return db.TableName.AsQueryable().ToList();
}
finally
{
    ((IDisposable)db).Dispose();
}
于 2010-03-29T18:29:31.350 に答える