在我的代码中,我抛出异常并使用典型的try..catch捕获。异常中的消息是An error occured while executing the query. Please check the stack trace for more detail.
还有一个带有消息ValidationException was thrown.
的InnerException。没有其他InnerException。但是,当我通过Visual Studio 2015查看异常时,我可以展开Exception,转到InnerException并展开它,我看到了:
InnerException: Nothing
InnerExceptions: Count=1
然后我可以扩展InnerExceptions分支,看看我假设的是一个AggregateException,在这种情况下显示
(0): {"Error Parsing query"}
Raw View:
然后我可以扩展(0)组以查看像“详细信息”这样的属性,它提供完整详细的错误消息以及“ErrorCode”和许多其他信息。
当我尝试通过代码通过 ex.InnerException.InnerExceptions 引用“InnerExceptions”时,我不能,因为'InnerExceptions'不是'Exception'的成员。
如何在Visual Studio IDE中显示,但无法通过代码获取?
我正在编写使用IppDotNetSdkForQuickBooksApiV3 NuGet包的代码。我之所以提到这个,因为我不确定这是否是以某种方式从Intuit的API中添加的。我之前从未遇到过 InnerExceptions 组。
请注意:迭代InnerException属性不会返回上面提到的“详细信息”中发现的相同错误。
答案 0 :(得分:1)
Exception
类没有名为InnerExceptions的成员,但它是AggregateException的基类。 Visual Studio的调试器将找出每个对象'类型,因此能够显示他们拥有的每一个属性。
但是,Exception类的InnerException成员不是AggregateException类型,只是一般的Exception。也就是说,Visual Studio无法确定您的InnerException是否实际上是按类型的AggregateException。要解决这个问题,你需要施放。
我不熟悉vb.net语法,在C#land中它会喜欢这个:
((AggregateException)ex.InnerException).InnerExceptions
或者您可以尝试安全地投射:
if (ex.InnerException.GetType() == typeof(AggregateException))
{
var listOfInnerExceptions = ((AggregateException)ex.InnerException).InnerExceptions;
}
据我所知,VB.net中有一个DirectCast(obj, type)
方法可以用于此目的,但我可能错了。