为什么UnhandledExceptionEventArgs.Exception对象而不是exception?

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

我附加到AppDomain.UnhandledException

我想将UnhandledExceptionEventArgs.ExceptionObject Exeption转换为Exeption并对其进行处理。

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

MSDN文档不是非常有用的。

获取未处理的exception对象。

这不能被input到Exception,因为可以在.NET中抛出不从System.Exception派生的对象。 这在C#或VB.Net中是不可能的,但在其他基于CLR的语言中是可能的。 因此API必须支持这种可能性并使用types对象。

所以虽然它不应该是null,它实际上可能不是一个System.Exception。

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

除Jared已经提到的之外,如果将RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)应用于程序集(将由C#和VB编译器自动添加RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true) ,则可以安全地将其转换为.NET Framework 2.0及更高版本中的Exception

当应用此属性时,非exception“exception”将被包装在RuntimeWrappedException