[.net] UnhandledExceptionEventArgs.ExceptionObject가 예외가 아닌 객체 인 이유는 무엇입니까?

UnhandledExceptionEventArgs.ExceptionObject객체 가 아닌 이유는 무엇 Exception입니까?

에 첨부하고 AppDomain.UnhandledException있습니다.

에 캐스팅 UnhandledExceptionEventArgs.ExceptionObject하여 조사하고 싶습니다 Exception.

그리고 이것을 염두에두면 null이 될까요?

MSDN 설명서 exatly 유용하지 않습니다.

처리되지 않은 예외 개체를 가져옵니다.



답변

System.Exception에서 파생되지 않은 .Net에서 개체를 throw 할 수 있으므로 Exception에 형식화 할 수 없습니다. C # 또는 VB.Net에서는 불가능하지만 다른 CLR 기반 언어에서는 가능합니다. 따라서 API는 이러한 가능성을 지원하고 유형 객체를 사용해야합니다.

따라서 null이 아니어야하지만 실제로 System.Exception이 아닐 수도 있습니다.

자세한 내용은 CLI 사양 섹션 10.5 (특히 CLS 규칙 40)를 참조하십시오.


답변

Jared가 이미 언급 한 것 외에도 Exception.NET Framework 2.0 이상 RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)이 어셈블리에 적용된 경우 안전하게 캐스트 할 수 있습니다 (C # 및 VB 컴파일러에 의해 자동으로 추가됨).

이 속성이 적용되면 예외가 아닌 “예외”가에 래핑됩니다 RuntimeWrappedException.


답변