【发布时间】:2011-04-22 01:05:33
【问题描述】:
当 C# 抛出异常时,它可以有一个内部异常。我想要做的是获得最内部的异常,或者换句话说,没有内部异常的叶异常。我可以在 while 循环中执行此操作:
while (e.InnerException != null)
{
e = e.InnerException;
}
但我想知道是否有一些单行线可以用来代替。
【问题讨论】:
-
我在我的一个类中抛出了一个异常,但是我的类被一个吞下所有异常并抛出自己的异常的库使用。问题是,库异常非常通用,我需要知道我抛出了哪个特定异常才能知道如何处理问题。更糟糕的是,这个库会抛出自己的异常多次嵌套,达到任意深度。例如,它将抛出
LibraryException -> LibraryException -> LibraryException -> MyException。我的异常始终是链上的最后一个异常,并且没有自己的内部异常。 -
哦,我明白了为什么你可能会降到最里面,我自己已经这样做了(以及变体,例如从特定类型派生的最里面),但我不明白问题出在哪里你已经拥有的。
-
哦,我明白你的意思了。我只是想知道是否有另一种写法。我已经习惯使用
LINQ来做几乎所有事情,以至于当我不得不编写一个循环时,这似乎很奇怪。我主要从事数据访问工作,所以我几乎所有工作都使用ICollections。 -
@Daniel,
LINQ不只是掩盖了代码仍然必须循环的事实吗? .NET 中有真正的基于集合的命令吗? -
最正确的答案潜伏在底部附近,(目前)只有 2 票——Exception.GetBaseException()。这基本上永远存在于框架中。感谢 batCattle 的完整性检查。
标签: c# .net exception exception-handling while-loop