1. ホーム
  2. c#

[解決済み] using文の中で例外が発生してもDisposeは呼ばれるのか?

2022-09-13 05:37:35

質問

以下の例では、接続が using ステートメント内にある場合、例外が発生したときに接続を閉じて破棄するのでしょうか?

using (var conn = new SqlConnection("..."))
{
    conn.Open();
    // stuff happens here and exception is thrown...
}

この下のコードがそうなるようにするのは分かっているのですが、usingステートメントがどのようにそれを行うのか気になります。

var conn;
try
{
    conn = new SqlConnection("...");
    conn.Open();
    // stuff happens here and exception is thrown...
}
// catch it or let it bubble up
finally
{
    conn.Dispose();
}

関連する

例外が発生したときに、SQL 接続を確実に閉じるための適切な方法は何ですか?

どのように解決するのですか?

はい。 using は、try/finally ブロックでコードを囲みます。 finally の部分は Dispose() を呼び出します。しかし、それは Close() を直接呼び出すことはありません。 IDisposable インターフェースが実装されているかどうかだけをチェックするので Dispose() メソッドが実装されています。

も参照してください。