2011-05-17 7 views
1

try-catch-finallyブロックを使用して例外をキャッチしようとしています。私はcatchブロックで例外をキャッチし、グローバル例外変数を使用してfinallyブロックに渡しました。そうすることで、私はfinallyブロックの例外シナリオを処理しました。私はこれが厄介だと知っていますが、そうする必要があります。同じコードの標準問題がある場合はお知らせください。同じことについて何かを提案できれば、私は本当に義務づけられます。finallyブロック内の例外ハンドリングのヘルプ

ありがとうございました。

+0

何が必要ですか?あなたはちょうど 'キャッチ'ブログを取り除いて、 'finally'ブロックを持つことができました。 – rkg

+3

finallyブロックに例外を渡すことはありません。 –

+1

解決しようとしている問題を明確にすることはできますか?確かにそれを解決するためのよりよい方法があります! –

答えて

4

catchは、例外をキャッチして必要な例外処理を行うことです。 finallyブロックは、ファイルハンドル、データベース接続など、開いているリソースをすべてクリーンアップします。このブロックは、のほとんどの時間がで実行されるため、クリーンアップを実行する正しい場所ですが、それらはcatchブロックで処理する必要があります。

+4

Not_always_:http://stackoverflow.com/questions/1141502/why-does-this-finally-execute/1141801#1141801 –

+0

@Rick:それを指摘するThx! –

2

try-catch-finallyパターンは、意図したとおりに使用すると非常に便利で強力なパターンです。 finallyブロックの例外処理はではなく、が推奨されていますが、それはあまり意味がありません。
コードをパターンに合わせて再編成してください。逆の方法ではありません。

小さな例:

また
var reader = new StreamReader(path); 
try 
{ 
    // Do your work here 
    reader.ReadToEnd(); 
} 
catch (IOException ex) 
{ 
    // Handle specific error here 
    ShowUserError(ex.Message); 
} 
catch (Exception ex) 
{ 
    // Handle general error here 
    LogError(ex); 
} 
finally 
{ 
    // Perform clean up here 
    // This code will run regardless if there was an error or not 
    reader.Close(); 
} 

は、Try...Catch...Finally StatementsのためのMSDNドキュメントを見てください。