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 }
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 }
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
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的相关类提取出来,大家点这里下载吧.
