2017-09-06 10 views
0

ここでOracleExceptionが私が探しているものでない場合はどうなりますか?私は投げる必要がありますか?また、ここで一般的な例外をキャッチすることは正しいことですか?特定の例外および一般的な例外を管理する方法

try 
{ 
    does some code 
} 
catch (OracleException ex) 
{ 
    if (ex.Number == 20001) 
    { 
     throw new ValidationException("Unable blah blah blah"); 
    } 
    throw; 
} 
catch (Exception ex) 
{ 
    // Log it 
    TraceHelper.WriteLine("Exception updating tblah + Environment.NewLine + ex.StackTrace, MessageCategory.Error); 
    throw; 
} 

答えて

1

本当に良いことは、コードにバグがあるときに実現することです。あなたはどうやってそれをしますか?例外をトラップし、何らかの形で開発者に通知するグローバル例外ハンドラを通常クラッシュまたは配置します。

一般的な例外をキャッチしてスローしないことは、前のステートメントと逆になりますので、実行しないことをお勧めします。

これは通常、あなたは通常、あなたがから回復する方法がわからない例外をキャッチしたくないリース最後に速い(here a description

を失敗なくすることをお勧めとして受け入れられています。バグがあり、ArgumentNullExceptionが発生した場合は、アプリケーションで何をしますか?この状況から回復するためにコード内で行うことは何もありません。失敗し、ユーザーと開発者に通知してアプリケーションを終了する必要があります。

1

これは、例外の条件に基づいてOracleExceptionをキャッチするだけのようです。良いニュースは、C#6.0であなたがその条件を追加するwhen句を追加することができ、次のとおりです。

catch (OracleException ex) when (ex.Number == 20001) 
{ 
    throw new ValidationException("Unable blah blah blah"); 
} 

これはex.Numberが20001でない場合、スローされた例外は、あなたが持っている次のcatch節をチェックすることを意味し、この場合、それは一般的なキャッチに分類されます。議論まであり、一般的なキャッチすべきかどうか

は、親指の一般的な原則として、あなたは、一般的な例外処理を持つべきではありません。なぜコードが例外をスローしているのかわからない場合は、どのようにしてコードを正常に処理することができますか?

+0

いいので、タイプ20001でないとどうなりますか?私はそれがどう扱うべきかわからないことだと思います。 – Dritzz

+0

@Dritzz更新 – ediblecode

+0

を参照してください。私は6.0を実行していません。短期間に更新する予定ではありません。 – Dritzz

関連する問題