Я работаю с некоторыми классами, которые, при броске, имеют относительно глубокое дерево InnerException. Я хотел бы зарегистрироваться и реагировать на самое внутреннее исключение, которое является тем, имеющим настоящую причину для проблемы.
Я в настоящее время использую что-то подобное
public static Exception getInnermostException(Exception e) {
while (e.InnerException != null) {
e = e.InnerException;
}
return e;
}
Действительно ли это - надлежащий способ обработать деревья Исключения?
Я думаю, что вы можете получить внутреннее исключение, используя следующий код:
public static Exception getInnermostException(Exception e) {
return e.GetBaseException();
}
Одним словом, да. Я не могу думать о каком-либо значительно лучшем или другом способе сделать это. Если вы не хотели добавить его в качестве метода расширения, но это действительно шесть из одного, полуодо-дюжина другого.
Можно использовать метод GetBaseException . Очень быстрый пример:
try
{
try
{
throw new ArgumentException("Innermost exception");
}
catch (Exception ex)
{
throw new Exception("Wrapper 1",ex);
}
}
catch (Exception ex)
{
// Writes out the ArgumentException details
Console.WriteLine(ex.GetBaseException().ToString());
}