gpt4 book ai didi

c# - 是否所有异常类型都在普通旧 "Exception"下捕获?

转载 作者:太空狗 更新时间:2023-10-29 23:59:17 27 4
gpt4 key购买 nike

我只是想更好地理解这一点。

我知道有很多不同的exception types ,根据我所做的一些阅读,所有异常类型都被 Exception 捕获。首先,我能确定这是真的吗?

try{
...
}
catch(Exception x){
//No matter what fails in the try block, x
//will always have a value since all exception
//types are caught under Exception? I guess
//What I really want to know, is will this ever
//Fail?
}
catch(SystemException x){
//This code will never execute since all
//exceptions are caught in the first catch?
}

接下来,这个捕获层次结构是如何工作的?如果 Exception 位于顶部,是否所有其他异常类型都在 Exception 下面一层,或者是否有多个类型层,比如 Exception 是 ExceptionSomething 的父级,而 ExceptionSomethingElse 是 ExceptionSomethingElse 的父级?

附录:

或者如果我们有这样的代码:

try{
...
}
catch(SystemException x){
//If there is an exception that is not a SystemException
//code in this block will not run, right (since this is
//looking specifically for SystemExceptions)?
}

最佳答案

这实际上取决于您的 .NET 版本和配置。在 C++/CLI 中,您可以抛出任何东西;它不必是 Exception。在 1.1 (IIRC) 中,您只能使用像这样的 catch block 来捕获它们:

catch {...}

这不是很有帮助 - 您看不到发生了什么。在 2.0 (IIRC) 中,默认情况下 此类异常会自动包装在虚拟 RuntimeWrappedException 子类中。但是,为了兼容性,您可以将其关闭。我求求你:不要 :)

关于c# - 是否所有异常类型都在普通旧 "Exception"下捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com