[解決済み] try catchブロックのネストを回避するパターン?
2022-05-17 14:50:06
質問
ある計算を実行するための3つ(またはそれ以上)の方法があり、それぞれが例外で失敗する可能性があるという状況を考えてみましょう。成功するものを見つけるまでそれぞれの計算を試みるために、私は次のようにしています。
double val;
try { val = calc1(); }
catch (Calc1Exception e1)
{
try { val = calc2(); }
catch (Calc2Exception e2)
{
try { val = calc3(); }
catch (Calc3Exception e3)
{
throw new NoCalcsWorkedException();
}
}
}
より良い方法でこれを実現する、受け入れられるパターンはあるのでしょうか?もちろん、それぞれの計算をヘルパーメソッドでラップして、失敗したらnullを返すようにすることはできますし、単に
??
演算子を使えばいいのですが、もっと一般的に(つまり、使いたいメソッドごとにヘルパーメソッドを書かなくても)これを実現する方法はないでしょうか?私は、任意のメソッドをtry/catchでラップし、失敗時にnullを返すジェネリックスを使用した静的メソッドを書くことを考えましたが、私はこれをどのように行うかわかりません。何かアイデアはありますか?
どのように解決するのですか?
制御フローや例外的な状況には、できるだけ例外を使用しない。
しかし、あなたの質問に直接答えるならば、(すべての例外型が同じであると仮定して)。
Func<double>[] calcs = { calc1, calc2, calc3 };
foreach(var calc in calcs)
{
try { return calc(); }
catch (CalcException){ }
}
throw new NoCalcsWorkedException();
関連
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
-
[解決済み】C++ シングルトンデザインパターン
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
-
[解決済み】例外をスローしない場合、try/catchブロックはパフォーマンスを低下させるか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない