Dev.Hong
将欲取之 必先予之……
随笔- 53  文章- 0  评论- 220 
博客园  首页  新随笔  联系  管理  订阅 订阅
自定义Exception
Gentle.NET是用C#写的一个开源的数据持久层,我曾经初略的看过他的代码,Gentle.NET的结构写得很清晰,值得一看,今天先说说它的自定义异常 GentleException。 GentleException继承自 System.ApplicationException,并且实现了ISerializable接口,它有扩展了Error属性,类型为自定义的Error枚举,指示该GentleException的具体错误。并且重写了ToString方法,将Error的相关信息写入到了String当中并返回现在当你使用时,你只需这样就行了。
 1 //throw一个异常
 2 throw new GentleException( Error.NoProperty, "NoProperty" );
 3 //catch一个异常
 4 try{
 5         
 6 }
 7 catch( GentleException ex ){
 8     if ( ex.Error == Error.NoProperty ){
 9         //自定义操作
10         .
11     }
12     else
13         throw;
14 }


我为什么在这里说GentleException的好呢,它无非就是增加一个Error的枚举属性呀,是的,我们大家都可能做个用户帐号

注册方面的数据操作吧,一般都会把用户名设置成唯一值,然后在新增或更新的操作中进行catch,以判断是否有重复的用户

名写入或更新

 1 try{
 2     //
 3 }
 4 catch( System.Data.SqlClient.SqlException ex ){
 5     if ( ex.number == 237 ){
 6         //进行相关处理(指定的用户名已处理).
 7     }
 8     else
 9         throw;
10 }


由于本人记性不好,并且number众多,经常需要查阅number定义,我想如果将number属性设计成一个enum,那样可以望文生

义,也不需要去查阅那该死的数值了。


GentleException只是对ApplicationException进行了简单的扩展,可能不能满足某些的要求,不过大家可以根据自已的需要

进行扩展,比如我们给Error枚举项加上特性描述,如下面这样

 1         /// <summary>
 2         /// 未知的异常
 3         /// </summary>
 4         [Services.Level( Services.Severity.Unclassified ),Services.Message( "未知的异常!" )]
 5         Unspecified,
 6         /// <summary>
 7         /// 未知的用户(未验证的用户)
 8         /// </summary>
 9         [Services.Level( Services.Severity.Error ),Services.Message( "未知的用户(未验证的用户)!" )]
10         UnKnowUser,
11         /// <summary>
12         /// 反射类型出错
13         /// </summary>
14         [Services.Level( Services.Severity.Error ),Services.Message( "在反射类型({0})时出错!" )]
15         ReflectorObjectException

这样,我们在throw一个异常时,只需传入Error属性时,GentleException自动通过反射把Error的特性描述读出来,设置

Message属性,这样不是很方便吗?

好了,下面我把GentleException的相关类提取出来,大家点这里下载吧.

posted on 2007-04-17 13:59 Dev.Hong 阅读(617) 评论(2) 编辑 收藏
刷新评论刷新页面返回顶部
程序员问答社区,解决您的IT难题
博客园首页博问新闻闪存程序员招聘知识库
Copyright ©2012 Dev.Hong