Frage

Nehmen wir an, dass eine bestimmte Exception "SomeException" Teil des Ausnahme-Stack ist,

so lassen Sie uns annehmen ex.InnerException.InnerException.InnerException vom Typ "SomeException"

Gibt es ein eingebaute API in C #, die einen gegebenen Ausnahmetyp in Ausnahme-Stack zu finden versuchen,?

Beispiel:

SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));
War es hilfreich?

Lösung

Nein, ich glaube nicht, dass es irgendeine Art und Weise in gebaut ist, es zu tun. Es ist nicht schwer, obwohl zu schreiben:

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;
}

Wenn Sie C # 3 verwenden Sie könnten es eine Erweiterungsmethode machen (nur den Parameter „Diese Ausnahme außen“ machen), und es wäre noch schöner zu verwenden:

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

(Beachten Sie die Verkürzung des Namens als auch - anpassen, um Ihren eigenen Geschmack:)

Andere Tipps

Es ist nur 4 Codezeilen:

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

        return 
            exception.InnerException != null && 
            LocateExceptionInStack<T>(exception.InnerException);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top