c#中最内部的异常

本文关键字:异常 最内部 | 更新日期: 2023-09-27 18:21:24

有没有一种方法可以在不使用的情况下获得最内部的异常

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

我在找类似e.MostInnerException的东西。

c#中最内部的异常

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

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

这里有另一个不同的答案:您可以创建一个枚举器。

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循环:)