1

ビジネス ロジックを構築したい場合、カスタム例外をスローするか、特定のケースを回避するために特定の "If" 条件を追加してロジックを処理することをお勧めしますか?

例(ばかげていますが、ポイントを取得するための簡単な例):

var success = true;
try{

   if(value == 5){
      throw new CustomException("Invalid Value!");
   }

   DoStuffIfValueIsValid();

}catch(CustomException e){
   success = false;  
}

return success;

VS

var success = true;    

if(value == 5){
   success = false;
} else {
   DoStuffIfValueIsValid();
}
return success;

この例がばかげているように見えることはわかっていますが、より多くのロジックを含む大規模なコードでは、複数の try catch の使用を避けるために、より多くの条件を使用する必要がありますか?

前もって感謝します!

4

3 に答える 3

3

簡単に言えば、プログラムの流れを制御するために例外を使用しないことをお勧めします。問題を解決するためのオプションが他にない場合は、例外を発生させる必要があります。結果を返すためだけにプログラムの特定のポイントにジャンプするのではありません。例外は、「例外的」または予期しない状況のために予約されています。そのようにすることは、 を書くことに少し似ていgotoます。それとは別に、それらはパフォーマンスに大きな影響を与える可能性のある高価なオブジェクトです。NET Framework パフォーマンス ルール ブックのMSDN の記事「制御フローの例外の使用を避ける」を参照してください。

于 2013-06-13T21:22:42.073 に答える
1

どちらの方法も有効であり、そのコードが他に何を担当しているかに大きく依存します。

1 つ目は、それが例外的な場合です。続行するための論理的な方法がありません。あなたの例では、通常、1 つのメソッド内で独自の例外をスローしてキャッチすることはありません。通常、失敗に対処できるポイントまで呼び出しチェーンを巻き戻すことができるようにするために必要です。

2番目の方法(それができる場合はこれが最初のオプションになるはずです)は、エラー状態を論理的に処理できる場合はそうするというものです。

また、2番目のオプションは「ガード句」として扱われることがよくあります

通常は次のように書かれます:-

if(value == 5) return false;
DoStuffIfValueIsValid();
于 2013-06-13T21:22:48.287 に答える