C# try-catch-return
2024-09-05 21:55:32
正常执行try后才能执行finally,catch中的语句可能会影响finally的执行
使用 finally 块,可以清理在 Try 中分配的任何资源,而且,即使在 try 块中发生异常,您也可以运行代码。 通常,控件离开 try 语句之后,finally的语句会阻止运行。 正常执行中 break、continue、goto 或 return 语句的执行,或对 try 语句外部异常的传播,可能会导致发生控件转换。
已处理的异常中会确保运行关联的 finally 块。 但是,如果异常未得到处理,则 finally 块的执行取决于如何触发异常展开操作。 此操作又取决于计算机是如何设置的。 有关更多信息,请参见 Unhandled Exception Processing in the CLR(CLR 中的未经处理的异常处理)。
通常,当未经处理的异常中止应用程序时,finally 块是否运行并不重要。 但是,如果您拥有的 finally 块中的语句必须在该环境下运行,则一个解决方案是将 catch 块添加到 try-finally 语句中。 或者,可以捕获可能是在调用堆栈更上方的 try-finally 语句的 try 块中引发的异常。 即可以捕获调用了包含 try-finally 语句的方法中的、或调用了该方法的方法中的、或调用堆栈中任何方法中的异常。 如果未捕获异常,则 finally 块的执行取决于操作系统是否选择触发异常展开操作。
try-catch-return的执行顺序
不管是在try中,还是在catch中,只要他们中有return和底部的finally同时存在,就在程序运行最后先执行finally,再执行return,try-catch-return中共享一个局域(变量在其中保持一致)
static void Main()
{
Console.WriteLine(Test());
Console.ReadKey();
} static int Test()
{
int num = 0;
try
{
num = 1;
throw new Exception("手动控制抛出异常");
return num;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return num;
}
finally
{
num++;
Console.WriteLine("我在Finally中num={0}", num);
}
}
最新文章
- 获取系统进程信息和进程依赖的dll信息
- iOS字体换算 PS的字体大小 <;=>;iOS上字体大小
- Eclipse反编译工具Jad及插件JadClipse配置(转)
- Elasticsearch aggregations API
- java.util.Map源码分析
- mysql hash索引优化
- genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤
- Redis安装和基础介绍
- [LeetCode] Reaching Points 到达指定点
- 克隆Rockey6加密狗复制资料
- Oracle客户端连接数据库配置
- 自定义chromium浏览器
- np.newaxis
- android 简单的画图片
- Elemet-技巧
- linux git 报错提示 fatal: &#39;origin&#39; does not appear to be a git repository 解决办法
- qcow2、raw、vmdk等镜像格式的比较和基本转换
- [bzoj 1616][Usaco2008 Mar]Cow Travelling游荡的奶牛
- VMTurbo:应对散乱虚拟机的强劲工具
- Python爬取招聘信息,并且存储到MySQL数据库中