有没有办法在不使用的情况下获得最内部的异常:
while (e.InnerException != null) e = e.InnerException;
我正在寻找类似e.MostInnerException
的内容。
答案 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循环:)