Почему UnhandledExceptionEventArgs.ExceptionObject объект, а не исключение?


почему UnhandledExceptionEventArgs.ExceptionObject объект, а не Exception?

Я прикрепляюсь к AppDomain.UnhandledException.

Я хотел бы бросить UnhandledExceptionEventArgs.ExceptionObject до Exception и interogate его.

и с учетом этого он когда-нибудь будет нулевым?

The Примечание не очень полезно.

возвращает необработанный объект исключения.

2 118

2 ответа:

Это не может быть введено в исключение, потому что в .Net можно бросать объекты, которые не являются производными от System.Исключение. Это невозможно в C# или VB.Net но это возможно и на других языках CLR. Следовательно, API должен поддерживать эту возможность и использует объект типа.

поэтому, хотя он никогда не должен быть нулевым, на самом деле это может быть не система.Исключение.

см. раздел 10.5 спецификаций CLI (в частности, правило 40 CLS) для получения более подробной информации

В дополнение к тому, что Джаред уже упоминал, вы можете смело бросить в Exception в .NET Framework 2.0 и выше, если RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true) был применен к вашей сборке (будет автоматически добавлен компиляторами C# и VB).

когда этот атрибут был применен, без исключения "исключения" будут обернуты в RuntimeWrappedException.