Heim >Backend-Entwicklung >C++ >Wie kann ich innere Ausnahmen in C# erneut auslösen und dabei den ursprünglichen Stack-Trace beibehalten?

Wie kann ich innere Ausnahmen in C# erneut auslösen und dabei den ursprünglichen Stack-Trace beibehalten?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-17 07:11:09643Durchsuche

How Can I Rethrow Inner Exceptions in C# While Preserving the Original Stack Trace?

Stack-Trace beim erneuten Auslösen einer inneren Ausnahme in C# beibehalten

Wenn eine Methode durch Reflektion aufgerufen wird, werden Ausnahmen in TargetInvocationException eingeschlossen. Um die zugrunde liegende Ausnahme an den Aufrufer zu übergeben und gleichzeitig den Stack-Trace beizubehalten, ist das erneute Auslösen der InnerException ein gängiger Ansatz. Diese Methode löscht jedoch versehentlich den ursprünglichen Stack-Trace.

Lösungen für .NET 4.5 und höher

ExceptionDispatchInfo wurde in .NET 4.5 eingeführt und bietet eine Lösung für dieses Problem. Durch das Abfangen der Ausnahme und das anschließende erneute Auslösen bleibt der Stack-Trace unverändert:

<code class="language-csharp">using ExceptionDispatchInfo =
    System.Runtime.ExceptionServices.ExceptionDispatchInfo;

try
{
    // 可能引发异常的代码
}
catch (Exception ex)
{
    ExceptionDispatchInfo.Capture(ex).Throw();
}</code>

Diese Methode funktioniert für jede Art von Ausnahme, nicht nur für AggregateException.

Vorteile von ExceptionDispatchInfo

ExceptionDispatchInfo hat die folgenden Vorteile:

  • Behalten Sie die ursprünglichen Stack-Traces bei und stellen Sie so beim Debuggen wertvolle Informationen bereit.
  • Unterstützt andere Ausnahme-Wrapper wie AggregateException.
  • Vereinfachen Sie die Ausnahmebehandlung in asynchronen Programmierszenarien.

Das obige ist der detaillierte Inhalt vonWie kann ich innere Ausnahmen in C# erneut auslösen und dabei den ursprünglichen Stack-Trace beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn