1、什么时候该异常处理?
1)代码最外层,如winfrom,避免用户看到内部异常信息用户体验不好,或者造成程序崩溃。
2)遇到异常需要恢复状态或者重试的地方。例如连接数据库偶然失败了,可以有个重连机制,在catch块重新连接数据库。
3)对于一系列有可能失败的任务,其中有一个任务失败,不想影响到其他任务。例如要上传100张图片,不想因为一张图片上传发生异常而失败,进而终止整个上传任务,仅需要记录下失败的图片,提醒用户重传即可。
2、异常处理需要注意的地方
1)catch和finally代码应该非常短,而且成功率极高,避免自己又抛出一个异常。否则clr会终止进程,避免安全漏洞或者不可预知的后果。这个类似于windows蓝屏,发生了严重的错误,宁愿使系统不可用。
2)catch块尽量避免直接捕捉异常的基类exception,而应该捕捉具体的异常类。
3、异常处理的方法和技巧
1)是否能构建统一的框架处理异常,而不用手工来处理呢?
有的人可能会问,能不能偷懒,在一个地方处理异常就行了。如果仅仅是记录异常系统信息,通知到用户,而且这些信息通常是可以缺少一些上下文的,是可以构建同一的机制记录异常信息的。
例如:
winfrom的application对象本身就提供了threadexception时间来捕捉为处理的异常
static void main()
{
//注册捕捉异常事件
application.threadexception += new system.threading.threadexceptioneventhandler(application_threadexception);
application.enablevisualstyles();
application.setcompatibletextrenderingdefault(false);
application.run(new form1());
}
static void application_threadexception(object sender, system.threading.threadexceptioneventargs e)
{
exception ex = e.exception;
//做一些极其简单的记录异常信息操作
}
又例如:
webfrom的global.asax本身就已经定义了void application_error(object sender, eventargs e) 来处理异常
void application_error(object sender, eventargs e)
{
// 在出现未处理的错误时运行的代码
exception ex = server.getlasterror();
//处理完异常后清除异常
server.clearerror();
}
但是很多时候,异常处理,不仅仅只是记录到了错误信息就可以了,有时候是需要失败重试或者清理资源等等,因此,仅仅靠统一构建异常处理框架是不够灵活的,因此可以一方面统一处理,另外一方面特殊的地方可以另外处理。
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
C#实现猜数字游戏
本文实例为大家分享了c#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100之间的随机数字,并且...
[阅读全文]
-
-
C# 可空类型的具体使用
在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空...
[阅读全文]
-
-
-
C#实现猜数字小游戏
本文实例为大家分享了c#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using system;using system.collecti...
[阅读全文]
-
-
C#实现简单俄罗斯方块
最近在看《.net游戏编程入门经典 c#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪念。1.类的设计在充...
[阅读全文]
-
-
网友评论