随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

C# 异常处理

异常可以认为是:成员没有完成,他声称可以完成的任务。成员没有完成他声称可以完成的任务,并不一定是该成员自身的原因,也有可能是其他的原因导致的。比如:该成员调用的其他成员有问题,或者给该成员的数据输入有问题,导致该成员不能完成任务。

异常处理方式就是try{}catch{]finally{},try{}包含可能出现问题的代码,catch{} 对可能出现的问题进行捕捉,finally{} 不管有没有问题最后都要执行。

一个try{}对应多个catch{},catch{}的设计理念是,找到第一个匹配的,而不是找到一个最匹配的。因此,当找到第一个匹配的时候,将跳过后面所有的catch{}。根据这个特点,catch{}的顺序应该是,从辈分低的异常到辈分高的异常依次排序。如果反了,后面的catch{}就变成了dead code。


 异常出现了,分为两种情况:

1、所有的catch都没有捕捉到,出现了漏网之鱼,即未处理的异常。CLR检测到未处理的异常,会终止进程。这个做法很妥当,因为出现了未处理的异常,CLR不知道会导致什么严重的情况,干脆直接终止进程。

2、其中的一个catch{}捕捉到了,进程不会终止。这时候有三个选择:

  • 重新抛出相同的异常
  • 抛出一个更详细的异常
  • 让线程退出

这里需要注意的是,不要抛出一个更抽象的异常,这样的工作没有意义,应该暴露给上层更详细的信息。永远都不要抛出System.Exception。这就好比,没有完成任务总要告诉具体的原因。事实上,Microsoft 为了禁止开发人员抛出System.Exception,把Exception设计为了抽象类,不允许实例化。

posted on   Andy Niu  阅读(507)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2011年12月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

点击右上角即可分享
微信分享提示