Question

Supposons qu'une exception particulière " SomeException " fait partie de la pile des exceptions,

supposons donc que ex.InnerException.InnerException.InnerException est de type & "; <=> &";

.

Existe-t-il une API intégrée en C # qui tente de localiser un type d'exception donné dans la pile d'exceptions?

Exemple:

SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));
Était-ce utile?

La solution

Non, je ne crois pas qu’il existe une manière de le faire. Ce n’est pas difficile d’écrire:

public static T LocateException<T>(Exception outer) where T : Exception
{
    while (outer != null)
    {
        T candidate = outer as T;
        if (candidate != null)
        {
            return candidate;
        }
        outer = outer.InnerException;
    }
    return null;
}

Si vous utilisez C # 3, vous pouvez en faire une méthode d’extension (il suffit de définir le paramètre & "this Exception outer &";) et il serait encore plus agréable de l’utiliser:

SomeException nested = originalException.Locate<SomeException>();

(Notez également le raccourcissement du nom - ajustez à votre goût:)

Autres conseils

Il n’ya que 4 lignes de code:

    public static bool Contains<T>(Exception exception)
        where T : Exception
    {
        if(exception is T)
            return true;

        return 
            exception.InnerException != null && 
            LocateExceptionInStack<T>(exception.InnerException);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top