无法在.NET中捕获的异常列表

Den*_*nis 17 .net c# vb.net

什么是例外列表CAN NOT在.NET中被抓?或者我在哪里可以找到这样的清单?

Ree*_*sey 31

无法直接捕获的唯一异常是(抛出框架)StackOverflowException.从逻辑上讲,这是有道理的,因为您没有堆栈中的空间来处理此时的异常.来自文档:

从.NET Framework 2.0版开始,try-catch块无法捕获StackOverflowException对象,默认情况下会终止相应的进程.

可以捕获ThreadAbortException,但总是会重新引发,因此具有独特的行为.来自文档:

ThreadAbortException是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发.

另请注意,某些AccessViolationException实例是损坏的状态异常,默认情况下可能无法处理.这些可以处理,但需要通过属性进行额外处理.有关详细信息,请参阅处理损坏的状态异常.

  • 请注意,您可以通过调用`Thread.ResetAbort()`来抑制`ThreadAbortException`重新抛出.(注意:不要这样做.) (10认同)
  • 还有"你可以毫无问题地捕获NullReferenceException." 已不再与编辑过的问题相关 (2认同)

Ode*_*ded 7

NullReferenceException当然可以被抓住.你是从哪里得到这个想法的?

A try {} catch {}将捕获非托管异常以及托管异常(请注意,没有异常条款catch).

唯一一个无法捕获的是StackOverflowException,并且TreadAbortException在捕获结束时被重新抛出.


Hap*_*375 5

试试这个...(在.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,无效状态会导致运行时崩溃。