>백엔드 개발 >C++ >스택 추적을 보존하기 위해 C#에서 예외를 어떻게 다시 발생시켜야 합니까?

스택 추적을 보존하기 위해 C#에서 예외를 어떻게 다시 발생시켜야 합니까?

DDD
DDD원래의
2025-01-23 19:06:40990검색

How Should Exceptions Be Rethrown in C# to Preserve Stack Traces?

C# 예외 Rethrow 모범 사례 가이드

C#에서 예외를 처리할 때는 명확한 스택 추적을 유지하기 위해 적절한 다시 발생 방법을 선택하는 것이 중요합니다.

방법 1: throw;

이 구문은 스택 추적을 유지하면서 현재 예외를 다시 발생시킵니다.

방법 2: throw ex;

이 메서드는 지정된 예외 개체를 다시 발생시킵니다. 그러나 원래 스택 추적을 throw 문의 현재 위치로 덮어쓰므로 예외의 원인을 정확히 찾아내기가 어렵습니다.

어떤 방법이 좋을까요?

예외를 다시 발생시킬 때는 항상 throw;을 사용하세요. throw ex;은 예외 소스에 대한 중요한 정보를 모호하게 하므로 코딩 오류로 간주되어야 합니다.

다른 소스의 예외 처리

다른 곳에서 발생한 예외(예: AggregateException 또는 TargetInvocationException)를 다시 발생시켜야 하는 경우 직접 다시 발생시키지 마세요. 대신 ExceptionDispatchInfo를 사용하여 필요한 정보를 보존하세요.

예:

<code class="language-csharp">try
{
    methodInfo.Invoke(...);
}
catch (System.Reflection.TargetInvocationException e)
{
    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw();
    throw; // 确保编译器理解该代码块不会退出
}</code>

위 내용은 스택 추적을 보존하기 위해 C#에서 예외를 어떻게 다시 발생시켜야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.