当前位置: 首页 > 编程语言 > C#

C#学习教程:.NET无法捕获的异常列表分享

时间:2023-04-10 18:56:01 C#

.NET无法捕获的异常列表.NET无法捕获的异常列表是什么?或者我在哪里可以找到这样的列表?唯一不能直接捕获的异常是(抛出的帧)StackOverflowException。从逻辑上讲,这是有道理的,因为此时堆栈上没有空间来处理异常。来自文档:从.NETFramework2.0版开始,try-catch块无法捕获StackOverflowException对象,默认情况下会终止相应的进程。ThreadAbortException可以被捕获,但总是被重新抛出,因此具有独特的行为。来自文档:ThreadAbortException是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发。另请注意,某些AccessViolationException实例是中断状态异常,默认情况下可能不会处理这些异常。这些可以被处理,但需要通过属性进行额外处理。有关详细信息,请参阅处理损坏的状态异常。当然可以捕获NullReferenceException。你从哪里得到这个想法的?try{}catch{}将捕获非托管异常和托管异常(注意catch上没有异常子句)。唯一不能捕获的是StackOverflowException,TreadAbortException在catch结束时被TreadAbortException捕获。ThreadAbortException注意:ThreadAbortException是一种可以捕获的特殊异常,但它会在catch块的末尾自动再次引发。抛出此异常时,运行时会在结束线程之前执行所有finally块。好吧,有些异常即使您捕获了它们也总是会被重新抛出。StackOverflowException是我唯一能想到的atm。可能是ThreadAbortedException。任何由于可访问性而无法按类型引用的异常都无法显式捕获,但可以使用基本Exception类型捕获。例如,代码协定框架中的ContractException有意在其程序集内部,因此您不能尝试显式捕获它。试试这个...(在.NETCore2.0上测试)System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(Type).GetType()).ToString()抛出忽略所有try/catch/finally块System.ExecutionEngineException,尽管它已被弃用,但表示运行时不再是这种类型的例外。很奇怪,不是吗?原因可能是typeof(Type).GetType()返回typeof(System.RuntimeType),它是一个内在类型和一个运行时内在类型。System.Runtime.Serialization.FormatterServices.GetUninitializedObject对typeof(string)这些类型都有参数验证,但开发者可能忘记检查这个非公共类型。因此,返回无效的System.RuntimeType。调用ToString,无效状态导致运行时崩溃。我不知道你为什么提到NullReferenceExceptions。NullReferenceExceptions是我发现的主要异常之一。我唯一能想到的就是内存异常或者StackOverflow,因为一用完内存就停止执行,所以异常很可能不会被捕获SEHException在某些情况下无法被捕获。它可以由非托管代码抛出。关于这个话题的一个很棒的SO线程出现在这里:SEHExceptionnotcaughtbyTry/Catch以上就是C#学习教程:.NET无法捕获的异常列表的全部内容分享,如果对大家有用,需要的话了解更多C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: