Maison > développement back-end > C++ > Comment les exceptions doivent-elles être renvoyées en C# pour préserver les traces de pile ?

Comment les exceptions doivent-elles être renvoyées en C# pour préserver les traces de pile ?

DDD
Libérer: 2025-01-23 19:06:40
original
989 Les gens l'ont consulté

How Should Exceptions Be Rethrown in C# to Preserve Stack Traces?

Guide des meilleures pratiques en matière de relance d'exceptions C#

Lors de la gestion des exceptions en C#, il est crucial de choisir une méthode de relance appropriée pour maintenir une trace claire de la pile.

Méthode 1 : throw;

Cette syntaxe renvoie l'exception actuelle tout en conservant sa trace de pile.

Méthode 2 : throw ex;

Cette méthode renvoie l'objet Exception spécifié. Cependant, il écrase la trace de pile d'origine par la position actuelle de l'instruction throw, ce qui rend difficile l'identification de la source de l'exception.

Quelle méthode est la meilleure ?

Lorsque vous relancez une exception, utilisez toujours throw;. throw ex; doit être considéré comme une erreur de codage car il masque des informations importantes sur la source de l'exception.

Gestion des exceptions provenant d'autres sources

Si vous devez relancer une exception provenant d'ailleurs (par exemple, dans une AggregateException ou TargetInvocationException), ne la relancez pas directement. Utilisez plutôt ExceptionDispatchInfo pour conserver les informations nécessaires.

Par exemple :

<code class="language-csharp">try
{
    methodInfo.Invoke(...);
}
catch (System.Reflection.TargetInvocationException e)
{
    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw();
    throw; // 确保编译器理解该代码块不会退出
}</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal