2004年12月17日

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

   このエントリーをはてなブックマークに追加 Clip to Evernote
昨日の続き。

では、「finally処理に対応する初期処理は、try ブロックの中に入れてしまう」ルールを無視し、
SqlDataReader dr = cmd.ExecuteReader();
をtryの外に出してみましょう。
    // sample2-3
SqlCommand cmd = new SqlCommand(sqltext,conn);
SqlDataReader dr = cmd.ExecuteReader();
try {
//
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
} finally {
dr.Close();
}

かなり、すっきりしました。でも、ExecuteReader 内での例外を補足できなくなってしまいました。これでは、いくらすっきりしたコードになっても意味がありません。

うーーん、やはり、try の中に入れるしかないのでしょうか。これは、インスタンスを new し、最後に、Dispose しないといけないクラスにも当てはまることになります。コンストラクタ内での例外を補足するには、やはり、new は、try の中で書く必要がありそうです。

ただ、nullで初期化したり、null かどうかを判断するコードを書くのは、どうも僕の趣味に合いません。(趣味でコードをいじくり回すな!としかられそうですが...)
(続く)


 

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

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