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

时间:2009-05-27 00:47:03

标签: .net exception exception-handling unhandled-exception

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

我附加到AppDomain.UnhandledException

我想将UnhandledExceptionEventArgs.ExceptionObject投射到Exception并与之互动。

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

MSDN documentation并不是很有用。

  

获取未处理的异常对象。

2 个答案:

答案 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中。