C# 异常处理
2011-12-31 17:04
281 查看
异常可以认为是:成员没有完成,他声称可以完成的任务。成员没有完成他声称可以完成的任务,并不一定是该成员自身的原因,也有可能是其他的原因导致的。比如:该成员调用的其他成员有问题,或者给该成员的数据输入有问题,导致该成员不能完成任务。
异常处理方式就是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设计为了抽象类,不允许实例化。
异常处理方式就是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设计为了抽象类,不允许实例化。
相关文章推荐
- 天轰穿C# -vs2010 - 03C#的异常处理之Finally关键字【原创】
- C#异常处理“try catch”与vb ”on error goto“
- 学习笔记之C#类、循环中的语句、基础知识和异常处理
- ----------------------C#异常处理 -------------------------------
- c#简单自定义异常处理日志辅助类
- 【C#】61. 并行查询的异常处理 PLINQ Exception
- C# 的异常处理
- C# 项目异常处理的总结
- 【又长见识了】C#异常处理,try、catch、finally、throw
- 编写高质量代码改善C#程序的157个建议[避免finaly内的无效代码、避免嵌套异常、避免吃掉异常、注意循环异常处理]
- C#中unhandled异常处理的问题
- Head First C# 中文版 第10章 异常处理 page451
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
- 有效处理C#中异常出现的相关事项
- C#之异常处理
- 我的c#之路(8.异常处理语句)
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- C#进阶系列——WebApi 异常处理解决方案
- C#基础知识梳理系列十:异常处理 System.Exception
- .天轰穿C# -vs2010 - 03C#的异常处理之.NET中异常处理方式【原创】