Лучший способ проверить на внутреннее исключение?

Вы могли использовать часть даты и времени для создания уникального имени файла, тот способ, которым это не дублировано, когда вызвано несколько раз.

56
задан John Saunders 16 November 2012 в 19:27
поделиться

6 ответов

Is это то, что вы ищете?

String innerMessage = (ex.InnerException != null) 
                      ? ex.InnerException.Message
                      : "";
55
ответ дан 26 November 2019 в 16:58
поделиться

Да:

if (ex.InnerException == null) {
    // then it's null
}
1
ответ дан 26 November 2019 в 16:58
поделиться

Иногда также InnerException имеет InnerException, поэтому вы можете использовать для него рекурсивную функцию:

public string GetInnerException(Exception ex)
{
     if (ex.InnerException != null)
     {
        return string.Format("{0} > {1} ", ex.InnerException.Message, GetInnerException(ex.InnerException));
     }
   return string.Empty;
}
5
ответ дан 26 November 2019 в 16:58
поделиться

Самое простое решение - использовать базовое условное выражение:

repEvent.InnerException = ex.InnerException == null ? 
    null : ex.InnerException.Message;
16
ответ дан 26 November 2019 в 16:58
поделиться

Забавно, я не могу найти ничего плохого в Exception.GetBaseException () ?

repEvent.InnerException = ex.GetBaseException().Message;
43
ответ дан 26 November 2019 в 16:58
поделиться

Пока отличные ответы. Аналогичным образом, но по-другому, иногда существует более одного уровня вложенных исключений. Если вы хотите получить изначально сгенерированное корневое исключение, независимо от его глубины, вы можете попробовать следующее:

public static class ExceptionExtensions
{
    public static Exception GetOriginalException(this Exception ex)
    {
        if (ex.InnerException == null) return ex;

        return ex.InnerException.GetOriginalException();
    }
}

И в использовании:

repEvent.InnerException = ex.GetOriginalException();
80
ответ дан 26 November 2019 в 16:58
поделиться
Другие вопросы по тегам:

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