Préserver la trace de la pile lors du renvoi d'une exception interne en C#
Lors de l'appel d'une méthode par réflexion, les exceptions seront enveloppées dans TargetInvocationException. Afin de transmettre l'exception sous-jacente à l'appelant tout en préservant sa trace de pile, la relance de l'InnerException est une approche courante. Cependant, cette méthode efface par inadvertance la trace de la pile d'origine.
Solutions pour .NET 4.5 et supérieur
ExceptionDispatchInfo a été introduit dans .NET 4.5, fournissant une solution à ce problème. En interceptant l'exception puis en la relancé, la trace de la pile restera inchangée :
<code class="language-csharp">using ExceptionDispatchInfo = System.Runtime.ExceptionServices.ExceptionDispatchInfo; try { // 可能引发异常的代码 } catch (Exception ex) { ExceptionDispatchInfo.Capture(ex).Throw(); }</code>
Cette méthode fonctionne pour tout type d’exception, pas seulement AggregateException.
Avantages d'ExceptionDispatchInfo
ExceptionDispatchInfo présente les avantages suivants :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!