Почему UnhandledExceptionEventArgs.ExceptionObject является объектом, а не исключением? - PullRequest
119 голосов
/ 27 мая 2009

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

Я присоединяюсь к AppDomain.UnhandledException.

Я бы хотел привести UnhandledExceptionEventArgs.ExceptionObject к Exception и связать его.

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

Документация MSDN не очень полезна.

Получает необработанный объект исключения.

Ответы [ 2 ]

140 голосов
/ 27 мая 2009

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

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

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

75 голосов
/ 17 сентября 2009

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

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

...