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

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

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

Я хотел бы передать UnhandledExceptionEventArgs.ExceptionObject в Exeption и проинтегрировать его.

И имея это в виду, будет ли оно когда-либо нулевым?

документация MSDN не является особенно полезной.

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

Ответ 1

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

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

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

Ответ 2

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

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