Wie eine besondere Ausnahme in einem Ausnahme-Stack lokalisieren
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));
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);
}