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
DDDoriginal
2025-01-23 19:06:40990parcourir

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>

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