決してコンパイラを軟化させないでください。彼らをボスにして、あなたが必要とすることを彼らにさせてください。
コンパイラは従順な性質を持っており、上司にされるのが好きです。あなたが彼らをなだめ始めた瞬間、彼らはあなたを助けなくなります。自分のパドルを持ってくる人もいます。
この質問をしなければならない場合は、おそらく間違ったアプローチをとっています。「例外を飲み込んだときにどのような値を返すか」の答えは、「この場所でこの例外を飲み込んだときに返す値として露骨に明らかな値」です。それほど明白なものがない場合は、飲み込んではいけません (「この例外をこの場所で飲み込んだ後、ループ内の明らかな場所から続行する」ことも同様です)。そして、「明らかな」ことが依然として間違っている可能性があるため、仮定を再確認してください。
コードを読んでいる人が、なぜそうではないのかを説明しない限り、悪いコードであると仮定して開始することはよくあることなので、飲み込んだ場合は明確にコメントする必要があります。
次のいずれかを行ったほうがよいでしょう。
throw;
例外を通過させます。何かがそれを処理するか、または何かが処理しないと、エラー メッセージとシャットダウンが表示されます (アプリケーションやエラーの可能性によっては、必ずしも悪いことではありません)。
throw e;
これはまったく同じ例外 (文字通り同じインスタンス) をスローしますが、呼び出したコードではなく、コードから発生していると見なされます。これが正しいことはめったにないので、明らかに間違っていると言う人もいます。私は同意しませんが、ケースがまれであることには同意します-嚥下のように、それが明らかな選択でない場合、それはほぼ間違いなく間違った選択であり、それが明らかな選択である場合でも、それは依然として間違った選択である可能性があります.
throw new ExceptionTypeAppropriateToThisMethodCall("a useful message");
また
throw new ExceptionTypeAppropriateToThisMethodCall("a useful message", e);
ここで、例外を、メソッドが呼び出し元のコードに提供するサービスにより密接に関連するものに変えます。2 番目の形式は、診断の良さのために内部例外をラップします。
場合によっては、アプリケーションを強制終了するか、アプリ ドメインをアンロードすることが最善の選択になることがありますが、それはほとんどの場合、例外を処理するものが何もないために発生します。