Как найти конкретное исключение в стеке исключений
Вопрос
Предположим, что конкретное исключение "SomeException
" является частью стека исключений,
так что давайте предположим ex.InnerException.InnerException.InnerException
имеет тип "SomeException
"
Есть ли в C# встроенный API, который попытается найти данный тип исключения в стеке исключений?
Пример:
SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));
Решение
Нет, я не верю, что есть какой-то встроенный способ сделать это.Хотя написать не сложно:
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;
}
Если вы используете C# 3, вы можете сделать его методом расширения (просто сделайте параметр «это исключение внешним»), и было бы еще приятнее использовать:
SomeException nested = originalException.Locate<SomeException>();
(Обратите также внимание на сокращение имени — адаптируйтесь по своему вкусу :)
Другие советы
Это всего 4 строки кода:
public static bool Contains<T>(Exception exception)
where T : Exception
{
if(exception is T)
return true;
return
exception.InnerException != null &&
LocateExceptionInStack<T>(exception.InnerException);
}
Не связан с StackOverflow