2012-03-25 8 views
0

私の質問は例外処理に関するものです。メソッドの例外を処理する正しい時刻は何ですか?

私は例えば、このような三つの方法がある場合:

Private void Method1() 
{ 
    //My code ... 
} 

Private void Method2() 
{ 
    //My code ... 
} 

Private void Method3() 
{ 
    //My code ... 
} 

を、私はこのようなページロードイベントに3つのメソッドを呼び出します。

void Page_Load() 
{ 
    if(!Page.IsPostBack) 
    { 

     Method1(); 
     Method2(); 
     Method3(); 
    } 
} 

例外処理のためのベストプラクティスはここにあります。 [Try and Catch]すべてのメソッドの例外は、私は

+0

これは、例外ハンドラで何をしたいかによって異なります。ユーザーに何が問題になったのかを知らせる場合は、それぞれに別々の例外ハンドラが必要です。あなたが一般化した "何かが間違っていて、それが何であるか教えてくれません"と欲しいのであれば、十分です。 –

+0

できるだけ早く例外をキャッチしてログに記録する必要があります。あなたがしていることは、文脈によって異なります。 'Method1'が例外を発生させた場合でも' Method2'を呼び出すことができます。カスタムエラーページを提供し、[Application_Error](http://msdn.microsoft.com/en-us/library/aa479319.aspx#customerrors_topic6)で渡されたすべての例外をキャッチすることができます。 –

答えて

3

例外からの復旧方法がわかっている場合は、try{}catch{}にしてください。

エラーをログに記録するには、グローバル/トップのtry{}catch{} /エラーハンドラを使用するのが適切です。

一般的に、例外の処理方法がわからない場合は、それをキャッチしないでください。そのような例外を飲み込まないでください。できるだけ優雅にアプリケーション/スレッドを閉じてください。

-1

私の意見では、あなたがすべてのメソッドでキャッチを試みる置く必要があります...ただ、ページの読み込み中に単一[Try-Catch]との3つの方法の呼び出しをラップimplementation.or方法で意味します。そのようにすれば、エラーをより簡単に追跡できます。

私が知る限り、外部ソースを扱うときだけtry catchを使用することがベストプラクティスです。 (すなわち、ファイルIO、データベース通信など) これは、try catchによってオーバーヘッドが生じるためです。

は、(。。ダウン投票する場合、これは私を助け、だけでなく、質問をした人理由を教えてください)

編集:私の最後のコメントを参照してください。他の人が指摘しているように、どこにでもtry/catchブロックを置くことはまったく意味がありません!

+0

はい、コードで捕まえられないものだけをtry-catchしてください。たとえば、ゼロ除算が発生する恐れがある場合は、最初にオペランドの値をチェックし、try-catchブロックをスラップしないでください。 –

+1

どこにでもキャッチしてみませんか? 'OutOfMemoryExcpetion'はいつですか?あまりにもそれをキャッチ? – Oded

+0

ほとんどの方法で '試行錯誤 'することは有益です。アプリケーションがますます複雑になるにつれて、例外のバブルアップを制御することはますます困難になっています。だから、この点で@ラプソディーの投稿は正当な理由がない(+1)。 'OutOfMemoryException'の例で示されることは何ですか? [この回答は、OOMの例外に関してすべてを言います。](0120-18752) – MoonKnight

1

私の答えhereを見てください。これはかなり広いテーマですが、私は考慮すべきいくつかのことを要約しました。これはすべての答えではありませんが、私はあなたの決定に役立つ5つのポイントを要約しました。

関連する問題