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 중국어 웹사이트의 기타 관련 기사를 참조하세요!