Надлежащий способ найти самое внутреннее исключение?

Я работаю с некоторыми классами, которые, при броске, имеют относительно глубокое дерево InnerException. Я хотел бы зарегистрироваться и реагировать на самое внутреннее исключение, которое является тем, имеющим настоящую причину для проблемы.

Я в настоящее время использую что-то подобное

public static Exception getInnermostException(Exception e) {
    while (e.InnerException != null) {
        e = e.InnerException;
    }
    return e;
}

Действительно ли это - надлежащий способ обработать деревья Исключения?

10
задан Vinko Vrsalovic 8 December 2015 в 13:17
поделиться

3 ответа

Я думаю, что вы можете получить внутреннее исключение, используя следующий код:

public static Exception getInnermostException(Exception e) { 
    return e.GetBaseException(); 
}
11
ответ дан 3 December 2019 в 22:37
поделиться

Одним словом, да. Я не могу думать о каком-либо значительно лучшем или другом способе сделать это. Если вы не хотели добавить его в качестве метода расширения, но это действительно шесть из одного, полуодо-дюжина другого.

0
ответ дан 3 December 2019 в 22:37
поделиться

Можно использовать метод 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());
}
4
ответ дан 3 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: