.net 为什么UnhandledExceptionEventArgs.ExceptionObject是对象而不是异常?
为什么.net 为什么UnhandledExceptionEventArgs.ExceptionObject是对象而不是异常?,.net,exception,exception-handling,unhandled-exception,.net,Exception,Exception Handling,Unhandled Exception,为什么未处理的ExceptionEventTargets.ExceptionObject是对象而不是异常 我正在附加到AppDomain。未处理的异常 我想将未处理的ExceptionEventTargets.ExceptionObject强制转换为异常并对其进行互操作 考虑到这一点,它会是空的吗 这个方法不是很有用 获取未处理的异常对象 无法将其类型化为异常,因为可以在.Net中抛出不是从System.Exception派生的对象。这在C#或VB.Net中是不可能的,但在其他基于CLR的语言中
未处理的ExceptionEventTargets.ExceptionObject
是对象而不是异常
我正在附加到AppDomain。未处理的异常
我想将未处理的ExceptionEventTargets.ExceptionObject
强制转换为异常
并对其进行互操作
考虑到这一点,它会是空的吗
这个方法不是很有用
获取未处理的异常对象
无法将其类型化为异常,因为可以在.Net中抛出不是从System.Exception派生的对象。这在C#或VB.Net中是不可能的,但在其他基于CLR的语言中也是可能的。因此,API必须支持这种可能性并使用类型对象 因此,虽然它不应该为null,但实际上可能不是System.Exception
有关更多详细信息,请参见CLI规范第10.5节(特别是CLS规则40)除了Jared已经提到的内容之外,如果
RuntimeCompatibilityAttribute(WrapnoneExceptionThrows=true)
已应用于程序集,则可以安全地强制转换到.NET Framework 2.0及更高版本中的异常(将由C#和VB编译器自动添加)
应用此属性后,非异常“异常”将被包装在RuntimeWrappedException
中,谢谢Jared,我在这里添加了您的答案和指向msdn社区内容的链接,因此在C中将其强制转换为Exception不会有问题?对吗?@MubasharAhmad如果类型不是从系统派生的,则可能会有问题。Exception
。异常可能是由“否”导致的n-CLI兼容语言,决定抛出一个System.Int32
。较新版本的CLR将自动将其包装在System.Exception
中,但这是一个可以disabled@MubasharAhmad我建议您使用“as”强制转换,以便在对象不是从类型Exception派生的情况下,强制转换dEFAULT为null,而不是引发异常。那么为什么try catch
block不允许捕获非异常对象?感谢您提供的信息;我是手动处理的,即,如果未能引发异常,则将其包装在RuntimeWrappedException中。