Ree*_*sey 31
无法直接捕获的唯一异常是(抛出框架)StackOverflowException.从逻辑上讲,这是有道理的,因为您没有堆栈中的空间来处理此时的异常.来自文档:
从.NET Framework 2.0版开始,try-catch块无法捕获StackOverflowException对象,默认情况下会终止相应的进程.
可以捕获ThreadAbortException,但总是会重新引发,因此具有独特的行为.来自文档:
ThreadAbortException是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发.
另请注意,某些AccessViolationException实例是损坏的状态异常,默认情况下可能无法处理.这些可以处理,但需要通过属性进行额外处理.有关详细信息,请参阅处理损坏的状态异常.
NullReferenceException当然可以被抓住.你是从哪里得到这个想法的?
A try {} catch {}将捕获非托管异常以及托管异常(请注意,没有异常条款catch).
唯一一个无法捕获的是StackOverflowException,并且TreadAbortException在捕获结束时被重新抛出.
试试这个...(在.NET Core 2.0上测试)
System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(Type).GetType()).ToString()
Run Code Online (Sandbox Code Playgroud)
忽略所有 try/catch/finally 块的ASystem.ExecutionEngineException会被抛出,尽管它已被弃用,说运行时不再抛出这种类型的异常。很奇怪,是吗?
其原因可能是typeof(Type).GetType()返回typeof(System.RuntimeType),它是内部类型和运行时内在函数。System.Runtime.Serialization.FormatterServices.GetUninitializedObject通过关于这些类型(如 )来验证参数typeof(string),但开发人员可能忘记检查此非公共类型。结果,System.RuntimeType返回无效。调用时ToString,无效状态会导致运行时崩溃。
| 归档时间: |
|
| 查看次数: |
7986 次 |
| 最近记录: |