返回最内层的InnerException

yaotomo 2015-01-09 11:05:23
如何获取异常对象的最内层信息?不知道InnerException有多少层,是否可以通过递归实现?


string errorMsg = ex.Message;
if (ex.InnerException != null)
{
if (ex.InnerException.InnerException != null)
{
//.....
}
else
{
errorMsg = ex.InnerException.Message;
}
}
...全文
324 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingzhezhige 2017-06-09
  • 打赏
  • 举报
回复
ExceptionUtils.getRootCause(e).getMessage()
於黾 2015-01-09
  • 打赏
  • 举报
回复
如果你仅仅只想知道有多少层,用4楼的代码,循环就可以实现 但是它并不保持状态,也就是说已经进入了最后一层,再想退回来会比较困难 如果你还想获取每一层的信息,还是用递归吧
  • 打赏
  • 举报
回复
上述循环,其实循环结束时,变量ex就是最深的那一个。 递归代码通常用在循环代码不太清晰的地方。如果循环代码非常清晰易懂,写递归代码反而是不方便阅读的了。事情到了一定的“度”总是会改变性质的,没有绝对。
  • 打赏
  • 举报
回复
循环就可以。
       var str = ex.Message;
       while (ex.InnerException != null)
       {
           ex = ex.InnerException;
           str += ex.ToString();   // ex.Message;
       }
alex_suen 2015-01-09
  • 打赏
  • 举报
回复
楼上的方法是正确的
rtdb 2015-01-09
  • 打赏
  • 举报
回复
递归很简单:

        string GetInnerException(Exception ex)
        {
            if (ex.InnerException != null)
            {
                return GetInnerException(ex.InnerException);
            }
            return ex.Message;

        }

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧