Как отметил @Udontknow в своем комментарии, не у каждого исключения есть внутренние исключения.Также могут быть, например, два внутренних исключения.Таким образом, чтобы правильно собрать все исключения, вы можете использовать следующий вспомогательный метод GetAllExceptions
extension:
public static class ExtensionMethods
{
public static string GetAllExceptions(this Exception ex)
{
int x = 0;
string pattern = "EXCEPTION #{0}:\r\n{1}";
string message = String.Format(pattern, ++x, ex.Message);
Exception inner = ex.InnerException;
while (inner != null)
{
message += "\r\n============\r\n" + String.Format(pattern, ++x, inner.Message);
inner = inner.InnerException;
}
return message;
}
}
Пример:
try
{
throw new Exception("Root Error", innerException: new Exception("Just inner exception"));
}
catch(Exception ex)
{
WriteLine(ex.GetAllExceptions());
}
Выход:
EXCEPTION #1:
Root Error
============
EXCEPTION #2:
Just inner exception