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
Freigeben: 2025-01-17 07:11:09
Original
640 Leute haben es durchsucht

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage