c#中最内层的异常

时间:2014-09-11 07:35:17

标签: c# .net exception-handling

有没有办法在不使用的情况下获得最内部的异常:

while (e.InnerException != null) e = e.InnerException;

我正在寻找类似e.MostInnerException的内容。

2 个答案:

答案 0 :(得分:3)

为了扩展Hans Kesting的评论,扩展方法可能会派上用场:

public static Exception GetInnerMostException(this Exception e)
{
    if (e == null)
         return null;

    while (e.InnerException != null)
        e = e.InnerException;

    return e;
}

答案 1 :(得分:0)

这是另一个不同的答案:你可以创建一个枚举器。

public static IEnumerable<Exception> EnumerateInnerExceptions(this Exception ex)
{
    while (ex.InnerException != null)
    {
        yield return ex.InnerException;
        ex = ex.InnerException;
    }
}

你可以做到

try
{
    throw new Exception("1", new Exception("2", new Exception("3", new Exception("4"))));
}
catch (Exception ex)
{
    foreach (var ie in ex.EnumerateInnerExceptions())
    {
        Console.WriteLine(ie.Message);
    }
}

因此,从技术上讲,您不再以可见的方式使用while循环:)