为什么UnhandledExceptionEventArgs.ExceptionObject
是对象而不是Exception
?
我附加到AppDomain.UnhandledException
。
我想将UnhandledExceptionEventArgs.ExceptionObject
投射到Exception
并与之互动。
考虑到这一点,它会永远是空的吗?
MSDN documentation并不是很有用。
获取未处理的异常对象。
答案 0 :(得分:140)
这不能输入Exception,因为可以在.Net中抛出不是从System.Exception派生的对象。这在C#或VB.Net中是不可能的,但在其他基于CLR的语言中也是可能的。因此,API必须支持这种可能性并使用类型对象。
因此,虽然它不应该为null,但它实际上可能不是System.Exception。
有关详细信息,请参阅CLI规范部分10.5(特别是CLS规则40)
答案 1 :(得分:75)
除了Jared已经提到的内容之外,如果已将Exception
应用于您的程序集,则可以安全地转换为.NET Framework 2.0及更高版本中的RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)
(将由C#自动添加) VB编译器)。
当应用此属性时,非异常“例外”将包含在RuntimeWrappedException
中。