Best Practice-Leitfaden zum erneuten Auslösen von C#-Ausnahmen
Bei der Behandlung von Ausnahmen in C# ist es wichtig, eine geeignete Rethrow-Methode zu wählen, um einen klaren Stack-Trace aufrechtzuerhalten.
Methode 1: throw;
Diese Syntax löst die aktuelle Ausnahme erneut aus und behält dabei ihren Stack-Trace bei.
Methode 2: throw ex;
Diese Methode löst das angegebene Ausnahmeobjekt erneut aus. Allerdings wird der ursprüngliche Stack-Trace mit der aktuellen Position der throw-Anweisung überschrieben, was es schwierig macht, die Ursache der Ausnahme zu ermitteln.
Welche Methode ist besser?
Wenn Sie eine Ausnahme erneut auslösen, verwenden Sie immer throw;
. throw ex;
sollte als Codierungsfehler betrachtet werden, da dadurch wichtige Informationen über die Quelle der Ausnahme verdeckt werden.
Behandeln von Ausnahmen aus anderen Quellen
Wenn Sie eine Ausnahme erneut auslösen müssen, die anderswo ihren Ursprung hat (z. B. in einer AggregateException oder TargetInvocationException), lösen Sie sie nicht direkt erneut aus. Verwenden Sie stattdessen ExceptionDispatchInfo, um die erforderlichen Informationen beizubehalten.
Zum Beispiel:
<code class="language-csharp">try { methodInfo.Invoke(...); } catch (System.Reflection.TargetInvocationException e) { System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw(); throw; // 确保编译器理解该代码块不会退出 }</code>
Das obige ist der detaillierte Inhalt vonWie sollten Ausnahmen in C# erneut ausgelöst werden, um Stack Traces beizubehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!