当前位置: 首页 > article >正文

C# Try Catch Finally 执行顺序是什么?有返回值呢?

Try Catch Finally 执行顺序是什么?有返回值呢?

大部分程序员都认为:C#异常处理执行顺序,很简单,没什么可说的。

  • 正常情况:执行顺序为 1、3(下图)
    在这里插入图片描述

  • 异常情况:执行顺序为1、2、3
    在这里插入图片描述


文章目录

  • Try Catch Finally 执行顺序是什么?有返回值呢?
    • 当有返回值时,执行顺序就没那么简了。不妨猜猜看下图的执行顺序?
    • 小结:


规则1:不管try中是否出现异常,finally块中的代码都会执行;

当有返回值时,执行顺序就没那么简了。不妨猜猜看下图的执行顺序?

在这里插入图片描述

  • return语句在后面
    在这里插入图片描述
    在这里插入图片描述
    正常顺序,不影响Try Catch Finally 执行顺序

  • return语句在Try语句块内
    在这里插入图片描述

规则2:无论有无异常,finally语句块都要执行

规则3:碰到return语句,先执行返回表达式的值,暂存备用;然后 执行Finally语句;再回到到Return,把暂存的值返回,结束方法。

规则4:Finally语句中,值类型的返回值不可更改;引用类型的值可以更改,返回的是更改后的返回值

  • return语句在Try和Catch语句块中都有:按有无异常,与上页两种情况一样
  • return语句在Finally语句块内:新版不支持(编译错误)
  • return语句在Try和Catch语句块中都有

在这里插入图片描述
在这里插入图片描述

小结:

  1. 无论有无异常、有无返回值,finally 语句块都会执行;
  2. 方法只会处理第一个 return语句, 后续会被忽略;(符合一般规则)
  3. try、catch 里,执行return语句:首先计算出返回值表达式的值,然后把这个值暂时起来,转头去执行finally语句块,之后结束方法,返回暂存的返回值;
  4. finally语句块:不能修改值类型的返回值;可以修改引用类型返回值内容,最终返回的是修改后的
http://www.lryc.cn/news/2380277.html

相关文章:

  • 水库雨水情测报与安全监测系统解决方案
  • 架构选择/区别
  • 嵌入式学习笔记 - STM32 ADC 模块工作模式总结
  • Python爬虫实战:获取taobao网最新rtx5060ti显卡销量数据并分析,为消费者做参考
  • IPLOOK | 2025 MVNOs 世界大会:从Wi-Fi通话到卫星覆盖
  • 零基础搭建!基于PP-ShiTuV2的轻量级图像识别系统(Docker+API部署指南)
  • 【C语言】贪吃蛇小游戏
  • Linux的日志管理
  • 大语言模型 07 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机训练 预训练 监督微调
  • [免费]苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 【RAG】RAG-MCP:基于检索增强生成来缓解大语言模型工具选择中的提示膨胀问题
  • 甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
  • UI自动化测试中,一个完整的断言应所需要考虑的问题
  • AIGC与数字金融:人工智能金融创新的新纪元
  • CSS详解:特性、选择器与优先级
  • 手机怎么查看网络ip地址?安卓/iOS设备查询指南
  • React-useRef
  • 无损耗协议:PROFINET和EtherNet IP网关的高效安装指南
  • 【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】
  • std::ranges::iota
  • C++(24):容器类<list>
  • 【C++】不推荐使用的std::allocator<void>
  • 基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
  • vue3 el-table实现字段可编辑
  • 基于React的高德地图api教程005:圆形标记的绘制、删除、修改
  • liunx定时任务,centos定时任务
  • 三种嵌入式开发常用的组网方式
  • ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案
  • 城市排水管网流量监测系统解决方案
  • Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群