我有一个抛出图形ODataError异常的程序。我的捕获只是将异常捕获为通用异常:
catch (Exception ex) {
Log.Write(ex);
}
Run Code Online (Sandbox Code Playgroud)
当我在 catch 上放置断点时,我可以将鼠标悬停在ex对象上并深入查看其属性:
但如果我在立即窗口中输入以下内容,我会得到:
ex.Error
Run Code Online (Sandbox Code Playgroud)
因此,当然,任何尝试ex.Error.Message也是“未定义的”。
我怎样才能获得该内部的参考ex.Error.Message?
IntelliSense 弹出窗口(也称为“DataTip”)允许您使用所检查对象具有的实际基础类型来分析对象。然后,它将使用反射来显示和公开该对象必须提供的所有内容,无论检查变量的类型如何。
立即窗口允许您执行一些代码,就像您用自己的代码编写它们一样。但是,此代码必须遵守当前作用域中变量的声明类型。
您在这里有多种选择:
如果您想在实际代码中使用这些属性,最好实际捕获您想要处理的特定异常类型。如果适用,您还可以使用公共超类。例如,您可以使用catch (OperationCanceledException ex)to catch anyOperationCanceledException以及派生的TaskCanceledException. 在这种情况下,ex将允许您访问来自OperationCanceledException及其超类的所有内容,但不能访问特定于派生类的内容。这实际上就是您在那里所做的,但是通过选择最广泛的超类,除了该类已经在类型层次结构的顶层引入的所有内容之外,System.Exception实际上并没有提供太多具体的见解。exException
如果您只想在立即窗口中临时检查它,您可以在立即窗口中的代码行中添加一个简单的转换:((ODataError) ex).Error.Message
或者,根据您的使用(也是从本地上下文继承),您可能需要完全引用它,如下所示:((Microsoft.Graph.Models.ODataErrors.ODataError) ex).Error.Message