CAN';不要陷入困境.NET

本文关键字:陷入困境 NET CAN | 更新日期: 2023-09-27 18:08:27

什么是不能捕获的异常列表。NET?或者在哪里可以找到这样的列表?

CAN';不要陷入困境.NET

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

从开始。NET Framework 2.0版本中,尝试捕获块无法捕获StackOverflowException对象,并且默认情况下会终止相应的进程。

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

ThreadAbortException是一个可以捕获的特殊异常,但它将在catch块结束时自动再次引发。

还要注意,一些AccessViolationException实例是损坏的状态异常,默认情况下可能不会得到处理。这些可以处理,但需要通过属性进行额外处理。有关详细信息,请参阅处理损坏状态异常。

NullReferenceException当然可以被捕获。你是从哪里得到这个主意的?

try {} catch {}将捕获非托管异常和托管异常(请注意,catch上没有异常子句(。

唯一无法捕获的是StackOverflowException,而TreadAbortException在捕获结束时被重新抛出。

ThreadAbortException

注:

ThreadAbortException是一个特殊的异常,可以被捕获,但它将在catch块结束时自动再次升高。什么时候如果引发此异常,运行时将执行所有finally块在结束线程之前。

好吧,有些异常总是会被重新抛出,即使你抓住了它们。StackOverflowException是我唯一能想到的atm。可能是CCD_ 8。

试试这个。。。(在.NET Core 2.0上测试(

System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(Type).GetType()).ToString()

抛出了一个忽略所有try/catch/finaly块的System.ExecutionEngineException,尽管有人反对它说运行时不再抛出这种类型的excpetion。奇怪,嗯?

原因可能是typeof(Type).GetType()返回typeof(System.RuntimeType),这是一个内部类型和运行时内在类型。System.Runtime.Serialization.FormatterServices.GetUninitializedObject对这些类型(如typeof(string)(的参数进行了验证,但开发人员可能忘记检查这个非公共类型。结果,返回一个无效的System.RuntimeType。当调用ToString时,无效状态会导致运行时崩溃。

任何由于可访问性而无法按类型引用的异常都不能显式捕获,但可以使用基本Exception类型捕获。

例如,代码契约框架中的ContractException被故意设置为其程序集的internal,这样您就无法显式捕获它。

我不知道你为什么提到NullReferenceExceptionsNullReferenceExceptions是我发现的主要异常之一。我脑海中唯一能想到的是内存不足异常或StackOverflow,因为一旦内存不足,执行就会停止,因此很有可能无法捕捉到异常。

SEHException在某些情况下无法捕获。它可以由非托管代码引发。关于这个主题的一个很棒的SO线程出现在这里:SEHException未被Try/Catch 捕获