为什么 UnhandledExceptionEventArgs.ExceptionObject 是一个对象而不是一个异常?

为什么 UnhandledExceptionEventArgs.ExceptionObject是一个对象而不是 Exception

我连接到 AppDomain.UnhandledException

我想将 UnhandledExceptionEventArgs.ExceptionObject转换为 Exception并询问它。

考虑到这一点,它会永远是无效的吗?

MSDN 文档并不十分有用。

获取未处理的异常对象。

15332 次浏览

不能将此类型输入到 Exception 中,因为可以将对象抛入。不从系统派生的网络。例外。这在 C # 或 VB.Net 中是不可能的,但在其他基于 CLR 的语言中是可能的。因此,API 必须支持这种可能性,并使用类型对象。

因此,虽然它永远不应该为空,但它实际上可能不是 System.Exception。

有关更多细节,请参见 CLI 规范第10.5节(特别是 CLS 规则40)

除了 Jared 已经提到的内容之外,您还可以在。NET Framework 2.0或更高版本,如果 RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)已经应用到您的程序集中(将由 C # 和 VB 编译器自动添加)。

当应用此属性时,非异常“异常”将被包装在 RuntimeWrappedException中。