Maison >développement back-end >C++ >Comment puis-je relancer les exceptions internes en C# tout en préservant la trace de pile d'origine ?

Comment puis-je relancer les exceptions internes en C# tout en préservant la trace de pile d'origine ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-17 07:11:09643parcourir

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

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 :

  • Préservez les traces de la pile d'origine, en fournissant des informations précieuses lors du débogage.
  • Prend en charge d'autres wrappers d'exception tels que AggregateException.
  • Simplifiez la gestion des exceptions dans les scénarios de programmation asynchrone.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn