2004年12月15日

try-catch-finallyについて考える(1)

   このエントリーをはてなブックマークに追加 Clip to Evernote
以下のコードをみてください。
  // sample1-1
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
try {
// 処理
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
} finally {
conn.Close();
}

この処理は、一つ問題があります。それは、Open で例外が発生した時に、例外を補足できないことです。そのため、
    // sample1-2
SqlConnection conn = new SqlConnection(strconn);
try {
conn.Open();
// 処理
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
} finally {
conn.Close();
}

と、Open の位置を、try ブロックの中に移動することにします。Open してい
ない状態の時に、Close を呼んでも問題ないので、これでOKです。
ここから導き出せる乱暴な結論は、 「finally処理に対応する初期処理は、try ブロックの中に入れてしまう」というものです。

しかしこれって、本当なのでしょうか。(続く)


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/10818306