Comment localiser une exception particulière dans une pile d'exceptions
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));
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