.NET Framework Lancer une exception à partir d'une méthode différente tout en préservant ses informations


Exemple

Parfois, vous souhaitez intercepter une exception et la lancer à partir d'un thread ou d'une méthode différente tout en préservant la pile d'exception d'origine. Cela peut être fait avec ExceptionDispatchInfo :

using System.Runtime.ExceptionServices;

void Main()
{
    ExceptionDispatchInfo capturedException = null;
    try
    {
        throw new Exception();
    }
    catch (Exception ex)
    {
        capturedException = ExceptionDispatchInfo.Capture(ex);
    }
    
    Foo(capturedException);
}

void Foo(ExceptionDispatchInfo exceptionDispatchInfo)
{
    // Do stuff

    if (capturedException != null)
    {
        // Exception stack trace will show it was thrown from Main() and not from Foo()
        exceptionDispatchInfo.Throw();
    }
}