C# で内部例外を再スローするときにスタック トレースを保持する
リフレクションを通じてメソッドを呼び出す場合、例外は TargetInvocationException でラップされます。スタック トレースを保持しながら基になる例外を呼び出し元に渡すには、InnerException を再スローするのが一般的な方法です。ただし、この方法では、元のスタック トレースが誤って消去されてしまいます。
.NET 4.5 以降のソリューション
ExceptionDispatchInfo は .NET 4.5 で導入され、この問題の解決策を提供しました。例外をキャッチして再スローすると、スタック トレースは変更されません。
<code class="language-csharp">using ExceptionDispatchInfo = System.Runtime.ExceptionServices.ExceptionDispatchInfo; try { // 可能引发异常的代码 } catch (Exception ex) { ExceptionDispatchInfo.Capture(ex).Throw(); }</code>
このメソッドは、AggregateException だけでなく、あらゆる種類の例外に対して機能します。
ExceptionDispatchInfo の利点
ExceptionDispatchInfo には次の利点があります:
以上が元のスタック トレースを保持しながら C# で内部例外を再スローするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。