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:
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!