2012-11-28 13 views
9

//私はcatchブロックは、任意の特定の方法で特別なものではありませんCatchブロックで例外が発生した場合は、C#でどのように処理するのですか?

try 
    { 
    } 
    catch(Excepetion ex) 
    { 
    // I have written code Here If Exception Occurs here then how to handle it. 
    } 
+0

あり、以下のいくつかの正解がありますが、例外はないよりも、私はおそらく確実にするために私のコードの設計を再検討したいです漁獲物に投げ込まれるか、あるいは少なくとも別の方法で摘発される。互いに入れ子にされた複数の '' try/catch/finally''ブロックは、コードの匂いです - 少なくとも私にとってです:)。 – Jduv

答えて

1

キャッチブロック内のコードをwriitenています。別のtry/catchブロックを使用するか、エラーを処理しないでください。

5
try 
{ 
    // Some code here 
} 
catch (Exception ex) 
{ 
    try 
    { 
     // Some more code 
    } 
    catch (Exception ex) 
    { 
    } 
} 
2

catchで例外をスローする可能性があるコード行については、余分な明示的なtry..ctachブロックを作成してください。 finallyブロックを持っていることを考慮することに加えて、そこに行こうとする行があることを忘れないでください。 finallyブロックで同じ問題が発生する可能性があります。したがって、あなたのコードがfinallyブロックに何らかの例外を投げる可能性がある場合は、そこにtry..catchを追加することもできます。

try 
{ 
} 
catch (Exception ex) 
{ 
    try 
    { 
     // code that is supposed to throw an exception 
    } 
    catch (Exception ex1) 
    { 
    } 
    // code that is not supposed to throw an exception  
} 
finally 
{ 
    try 
    { 
     // code that is supposed to throw an exception 
    } 
    catch (Exception ex1) 
    { 
    } 
    // code that is not supposed to throw an exception  
} 
8

catchブロック内にtry catchを配置することも、単に例外を再度スローすることもできます。そのfinallyブロックとtry catchを持つ方がよいので、catchブロックで例外が発生しても最終的にブロックコードが実行されます。

最後にブロックがexecuted in certain exceptionsにならないことがあります。より信頼性の高いメカニズムについては、Constrained Execution Regionsが表示されます。

+0

ネストされたtry catchステートメントは、悪いデザインのようです。例外をスローすることが失敗した場合は、大きなフライをするバグがあります。最後に常に起こるので、catchステートメントが失敗した場合にのみ起こるはずのコードを置くのが悪い場所です。私はちょうどハンドルを食べるか、理想的な世界では、try catchブロック中にスローされる例外を含むwhandled例外をすべてキャッチします。 –

2

よくフォールトされた3gプログラミング言語では、ダブルフォルトが発生することがよくあります。保護モードと286以降、ハードウェア言語の一般的な設計は、トリプルフォールトでチップをリセットすることです。

あなたはおそらく大丈夫でしょうか?この場合、処理を中止するか、ユーザーにエラーを報告する必要があることを悪く感じないでください。たとえば、IO例外(データの読み書き)を捕まえた後、読み込み中のストリームを閉じようとしたときに失敗した場合、そのパターンは劇的に失敗して警告にならない本当に例外的な何かが起こったというユーザ。

+0

おかげさまで.. –

0

私の友人Atul ..あなたが書き込みしようとすれば... catchブロックでcatchし、もう一度内部try..catchで例外が発生した場合、同じ問題が再度発生します。 だから、

http://msdn.microsoft.com/en-us/library/fwzzh56s%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.100%29.aspx

はこれがあなたのために働くなら、私が知っている..あなたは、Global.asaxの

リンク以下

チェックして、アプリケーションレベルのイベントでは、これらのエラーを処理することができ、この問題に対処します。 。

5

最も良い方法は、アプリケーションのレイヤーごとに独自の例外を作成し、内部例外をスローすることです。アプリケーションの次のレイヤーで処理されます。あなたが考えると、キャッチブロック内に新しいExceptionを得ることができるので、処理せずにこの例外を投げ直すだけです。

ビジネスロジックレイヤー(BLL)とデータアクセスレイヤー(DAL)の2つのレイヤーがあり、DALのキャッチブロックには例外があるとしましょう。

DAL:

try 
{ 
} 
catch(Excepetion ex) 
{ 
    // if you don't know how should you handle this exception 
    // you should throw your own exception and include ex like inner exception. 
    throw new MyDALException(ex); 
} 

BLL:

try 
{ 
    // trying to use DAL 
} 
catch(MyDALException ex) 
{ 
    // handling 
} 
catch(Exception ex) 
{ 
    throw new MyBLLException(ex); 
} 
関連する問題