使用Extension Methods来使IDataReader更加方便
2009-08-25 22:09 Jun1st 阅读(2311) 评论(20) 编辑 收藏 举报今天在逛老赵的Blog的时候,看到了他的常用辅助方法收集一文,想到了自己之前看到的并应用在项目中的一个方法,响应老赵的号召,拿出来晒晒。
在使用DataReader读取数据时,通常会遇到数据可能为Null, 但是又需要转换为如int等其它类型的数据,因此就通常会写这样的代码:
int count = reader["count"] == null ? 0 : int.Parse(reader["count"] + string.Empty);
而且这样的代码通常会大段大段出现在很多地方。
对于比较懒惰的程序员来说,这样的RY(repeat yourself)是一件很痛苦的事情,因此是时候来想个更好的方法了。这里首先想到的就是Extension Method。
SafeRead代码
public static T SafeRead<T>(this IDataReader reader, string fieldName, T defaultValue) { try { int ordinal = reader.GetOrdinal(fieldName); if (reader.IsDBNull(ordinal))//if column "fieldName" doesn't exist, will throw an exception return defaultValue; return (T)Convert.ChangeType(reader[ordinal], defaultValue.GetType()); } catch(InvalidCastException) { return defaultValue; } }
很简单的几句代码,有了这个方法之后,在使用DataReader时,就可以通过SafeRead来读取数据了
int count2 = reader.SafeRead<int>("count", 0);
简单但是实用的代码,希望对大家在项目中有所帮助。
最后附上老赵的常用辅助方法收集