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

C# try-catch 异常处理全套笔记

一、异常核心概念

异常:程序运行期间出现的错误,会导致程序直接崩溃退出。

异常处理作用:捕捉错误、给出友好提示、保证程序不崩溃、可以重试操作。

核心语法:try-catch-finally

  • try:放置可能出错的代码

  • catch:捕获对应异常、处理错误

  • finally:无论是否报错都会执行(资源释放常用)


二、C# 常见内置异常(考试必背)

Exception:所有异常的父类/基类,可以捕获所有异常,必须写在最后

异常类型

触发场景

FormatException

数据格式错误(字符串转数字格式非法)

OverflowException

数值超出数据类型范围(int最大值/最小值溢出)

DivideByZeroException

除数为0异常

IndexOutOfRangeException

数组/集合索引越界

NullReferenceException

空引用异常(对象为null调用属性/方法)


三、多Catch分级捕获规则(重点)

  • 可以写多个catch,分别捕获不同类型异常

  • 顺序必须:子类异常在前,父类Exception在后

  • 一旦被前面精准异常捕获,后面catch不会执行

  • Exception放最后,兜底捕获所有未知异常


四、完整案例1:数字输入分级捕获异常

需求:输入数字计算10的N次方,分别捕获格式错误、溢出错误、未知错误,支持重试。

static void Main(string[] args) { inputNum: // 标签:用于出错后重试 try { Console.WriteLine("请输入合法数字"); string s = Console.ReadLine(); // 可能报错:格式错误 / 数值溢出 int num = int.Parse(s); double sum = Math.Pow(10, num); Console.WriteLine("计算结果:" + sum); } // 1. 精准捕获:格式错误 catch (FormatException ex) { Console.WriteLine("异常信息:" + ex.Message); goto inputNum; // 回到开头重新输入 } // 2. 精准捕获:数值超出int范围 catch (OverflowException ex) { Console.WriteLine("输入数字超出范围"); goto inputNum; } // 3. 兜底捕获:所有未知异常 catch (Exception ex) { Console.WriteLine("无法预料的异常"); throw ex; // 抛出异常,让程序终止 } }

核心知识点

  • ex.Message:获取系统自带的详细异常描述信息

  • goto 标签:实现出错重试,是控制台重试最常用写法

  • throw ex:把异常重新抛出,程序终止、方便调试

  • 不写throw:异常被吞掉,程序继续运行


五、完整案例2:数组索引越界异常捕获

需求:输入索引读取数组值,越界报错后自动重试

static void Main(string[] args) { i1: try { int a = int.Parse(Console.ReadLine()); int[] ss = new int[] { 1, 2, 3, 4 }; // 输入负数/大于3的索引会触发越界异常 Console.WriteLine(ss[a]); } // 精准捕获索引越界 catch (IndexOutOfRangeException ex) { Console.WriteLine(ex.Message + "++++++++"); goto i1; // 重试 } // 兜底所有异常 catch (Exception) { throw; // 空throw:原样抛出捕获的异常 } }

六、空引用异常演示(NullReferenceException)

对象为null,直接调用成员触发异常

// 数组变量为空,没有实例化 int[] arr = null; // 报错:空引用异常 Console.WriteLine(arr[0]);

七、throw 抛异常核心区别

  • throw ex;:抛出当前捕获的异常对象,保留异常堆栈信息

  • throw;:原样抛出捕获的异常(简写)

  • throw new Exception("自定义信息"):手动抛出自定义异常提示

  • 不写throw:异常被处理,程序继续运行,不会崩溃


八、高频易错点

  • 多个catch时,通用Exception必须放最后,否则所有异常被拦截,精准catch失效

  • 只写try必须搭配catch/finally,不能单独存在

  • goto只能跳标签,实现简易重试逻辑

  • 空对象调用方法/索引必定触发空引用异常

  • int.Parse 非数字报格式异常、超大数报溢出异常


九、异常处理背诵口诀

Try包裹风险行,Catch分级抓异常;

精准异常写在前,基类Exception兜底防;

Message拿提示,Throw抛出崩或扛;

Goto跳转做重试,程序稳定不慌张。

http://www.jsqmd.com/news/1119438/

相关文章:

  • iOS Trace 分析入门到实战:符号化、Run 数据与卡顿归因
  • o3与o3-pro模型选型指南:成本、可靠性与长上下文实战
  • C++ STL 之 string_view 详解
  • 大模型科研写作能力盲测:Gemini 2.0作为裁判的五维评估实践
  • 企业智能体如何落地?从工作流编排、知识库调用到模型统一管理
  • 2007-2024年 供应链风险数据文本分析法 +文献
  • 音圈电机双闭环PID控制:提升精密定位性能的关键技术
  • 时序模型为何零样本胜出?
  • 最新AI论文写作工具综合榜(2026 优选)
  • OpenClaw 构建报错 FATAL ERROR: Reached heap limit - JavaScript heap out of memory 的解决方案
  • Lauterbach调试Cortex-R52架构多核芯片问题
  • QueryExcel终极指南:3分钟搞定100个Excel文件的批量查询神器
  • PT工具常用的debug指令(持续更新)
  • 【CMD】查找线程名称为Simulation的进程并把他杀掉
  • 黑金古刀-永劫助手(BlackGoldAncientSword)——《永劫无间》战绩查询与队友识别桌面工具
  • [C语言]Excel转换JsonObject
  • 《Java 100 天进阶之路》第50篇:阻塞队列与并发容器(2026版)
  • C4模型中的Level 1(System Context Diagram,系统上下文图)是C4模型最顶层的抽象视图
  • Code Combat | 极客战记 攻略【Kithgard地牢篇 14/42】祸之火焰
  • 模型训练后的第一件事?微调?NO
  • 中文科研写作AI工具实测:秘塔、Kimi、Qwen2-72B三大断点解决方案
  • 终极E-Hentai下载器指南:5分钟掌握画廊批量打包技巧
  • 查询服务器RAID卡-lspci命令
  • 看懂特斯拉IMU底层逻辑,才懂农业机器人不可替代的核心技术壁垒
  • ComfyUI IPAdapter plus高级配置实战:5大策略深度解析多模型协同工作流
  • 基于CNN卷积神经网络手写汉字识别系统 (GUI界面)【源码38期】
  • 2014-2024 接受关联公司担保次数企业间信任水平数据+代码文献
  • 体验家 XMPlus 数据分析引擎深度解析:交叉分析、趋势对比与智能下钻
  • 手把手教你学 Simulink——输送带多电机驱动的转速同步与主从控制(Droop / 带载分配)仿真
  • PMSM电流环控制原理与工程实践