답변:
System.Exception에서 파생되지 않은 .Net에서 개체를 throw 할 수 있으므로 Exception에 형식화 할 수 없습니다. C # 또는 VB.Net에서는 불가능하지만 다른 CLR 기반 언어에서는 가능합니다. 따라서 API는 이러한 가능성을 지원하고 유형 객체를 사용해야합니다.
따라서 null이 아니어야하지만 실제로 System.Exception이 아닐 수도 있습니다.
자세한 내용은 CLI 사양 섹션 10.5 (특히 CLS 규칙 40)를 참조하십시오.
System.Exception
. .NET Framework를 throw하기로 결정한 비 CLI 호환 언어로 인해 예외가 발생할 수 있습니다 System.Int32
. 최신 버전의 CLR은이를 자동으로 래핑 System.Exception
하지만 비활성화 할 수있는 설정입니다
try-catch
블록이 예외가 아닌 객체를 잡을 수없는 이유는 무엇 입니까?
Jared가 이미 언급 한 것 외에도 Exception
.NET Framework 2.0 이상 RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)
이 어셈블리에 적용된 경우 안전하게 캐스트 할 수 있습니다 (C # 및 VB 컴파일러에 의해 자동으로 추가됨).
이 속성이 적용되면 예외가 아닌 "예외"가에 래핑됩니다 RuntimeWrappedException
.