[解決済み] C#で例外を再スローする適切な方法は何ですか?[重複しています]。
2022-03-19 03:08:25
質問
したほうがいいのでしょうか。
try
{
...
}
catch (Exception ex)
{
...
throw;
}
あるいは、こうだ。
try
{
...
}
catch (Exception ex)
{
...
throw ex;
}
両者は同じことをするのか?一方は他方より優れているのか?
どのように解決するのですか?
例外の再投与には、常に次の構文を使用する必要があります。さもないと、スタックトレースを踏みつぶすことになります。
throw;
の結果のトレースを表示すると
throw ex
この例外の本当の原因ではなく、このステートメントで終わっていることがわかると思います。
基本的には、犯罪行為とみなすべきです。
throw ex
.
他の場所(AggregateException、TargetInvocationException)や他のスレッドから来た例外を再スローする必要がある場合、それを直接再スローするべきではありません。むしろ ExceptionDispatchInfo で、必要な情報はすべて保存されます。
try
{
methodInfo.Invoke(...);
}
catch (System.Reflection.TargetInvocationException e)
{
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw();
throw; // just to inform the compiler that the flow never leaves the block
}
関連
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み] 2つのリストを結合する
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み] C#でスタックトレースを失うことなくInnerExceptionを再スローする方法は?
-
[解決済み】.NETの例外をキャッチして再スローするためのベストプラクティス
-
[解決済み】C#でオブジェクトがNULLかどうかをチェックする