[解決済み] C#でスタックトレースを失うことなくInnerExceptionを再スローする方法は?
2022-03-16 11:42:44
質問
リフレクションを通して、例外を引き起こす可能性のあるメソッドを呼び出しています。リフレクションが周りに置くラッパーなしで、どのように私の呼び出し側に例外を渡すことができますか?
InnerExceptionを再スローしていますが、これではスタックトレースが破壊されてしまいます。
コード例です。
public void test1()
{
// Throw an exception for testing purposes
throw new ArgumentException("test1");
}
void test2()
{
try
{
MethodInfo mi = typeof(Program).GetMethod("test1");
mi.Invoke(this, null);
}
catch (TargetInvocationException tiex)
{
// Throw the new exception
throw tiex.InnerException;
}
}
解決方法は?
で
.NET 4.5
は、現在では
ExceptionDispatchInfo
クラスがあります。
これにより、スタックトレースを変更することなく、例外を捕捉して再スローすることができます。
using ExceptionDispatchInfo =
System.Runtime.ExceptionServices.ExceptionDispatchInfo;
try
{
task.Wait();
}
catch(AggregateException ex)
{
ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
}
に限らず、あらゆる例外に対して機能します。
AggregateException
.
により導入されました。
await
C#言語の機能で、内側の例外をアンラップして
AggregateException
インスタンスを作成し、非同期言語機能をより同期言語機能に近づけることを目的としています。
関連
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] .NETで例外を発生させずに現在のスタックトレースを表示する方法は?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Javaでスタックトレースを失うことなく例外を再投入する
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
-
[解決済み】WPFアプリケーションで例外をグローバルにキャッチする?
最新
-
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#におけるtypedefの等価性
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C#で例外を再スローする適切な方法は何ですか?[重複しています]。
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
-
[解決済み】.NETの例外をキャッチして再スローするためのベストプラクティス