Cómo localizar una excepción particular en una pila de excepciones
Pregunta
Supongamos que una Excepción particular " SomeException
" es parte de la pila de excepciones,
así que supongamos que ex.InnerException.InnerException.InnerException
es del tipo " <=> "
¿Hay alguna API incorporada en C # que intente localizar un tipo de excepción dado en la pila de excepciones?
Ejemplo:
SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));
Solución
No, no creo que haya ninguna forma integrada de hacerlo. Sin embargo, no es difícil escribir:
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 está utilizando C # 3, podría convertirlo en un método de extensión (simplemente haga que el parámetro " esta Excepción sea externa ") y sería aún más agradable usarlo:
SomeException nested = originalException.Locate<SomeException>();
(Tenga en cuenta el acortamiento del nombre también - ajústelo a su propio gusto :)
Otros consejos
Son solo 4 líneas de código:
public static bool Contains<T>(Exception exception)
where T : Exception
{
if(exception is T)
return true;
return
exception.InnerException != null &&
LocateExceptionInStack<T>(exception.InnerException);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow