[解決済み] catch' ブロックを使わずに 'try-finally' ブロックを使用する
質問
を使用することが適切な場面はありますか?
try-finally
ブロックが
catch
ブロックがない?
どのように解決するのですか?
の後に何らかのアクションが発生するようにするために使うのでしょう。
try
コンテンツの後、あるいは例外が発生したとき、しかしその例外を消費したくないときに、あるアクションが発生するようにするために使用します。
はっきりさせておきたいのですが、これは例外を隠すものではありません。その
finally
ブロックは、例外がコールスタックに伝搬される前に実行されます。
を使うときにもうっかり使ってしまいそうです。
using
キーワードを使用した場合、コンパイルされるのは
try-finally
(にコンパイルされるからです(正確な変換ではありませんが、議論するためには十分近いです)。
try
{
TrySomeCodeThatMightException();
}
finally
{
CleanupEvenOnFailure();
}
で動作するコード
finally
で実行されるコードは実行が保証されませんが、保証されないケースはかなり端的で、覚えていないくらいです。私が覚えているのは、もしあなたがそのようなケースに当てはまるのであれば、finally
が実行されないことが最大の問題ではない可能性が非常に高いということです :-) ので、基本的に気にしないでください。
Tobiasからのアップデートです。
finally
はプロセスが終了すると実行されません。
Paddy からの更新です。 .net の try..finally ブロックで finally が実行されない場合の条件
最も一般的な例は、コードが失敗してもデータベース接続または外部リソースを破棄することです。
using (var conn = new SqlConnection("")) // Ignore the fact we likely use ORM ;-)
{
// Do stuff.
}
にコンパイルされます。 何か のようなものです。
SqlConnection conn;
try
{
conn = new SqlConnection("");
// Do stuff.
}
finally
{
if (conn != null)
conn.Dispose();
}
関連
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] なぜすべてのブロックを "try"-"catch "で包んではいけないのですか?
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
-
[解決済み】try {...} finally {...} は良くて、try {...} catch{} はダメなのはなぜ?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み】C#の "using "の使い方は?