130

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

我附在AppDomain.UnhandledException.

我想投到UnhandledExceptionEventArgs.ExceptionObject一个Exception并询问它。

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

MSDN 文档不是特别有用。

获取未处理的异常对象。

4

2 回答 2

153

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

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

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

于 2009-05-27T00:51:31.303 回答
82

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

应用此属性后,非异常“异常”将被包裹在RuntimeWrappedException.

于 2009-09-17T15:30:52.673 回答