我有一系列的扩展方法,用于在IDataRecord对象上进行空值检查。目前,我是这样实现的:
public static int? GetNullableInt32(this IDataRecord dr, int ordinal)
{
int? nullInt = null;
return dr.IsDBNull(ordinal) ? nullInt : dr.GetInt32(ordinal);
}
public static int? GetNullableInt32(this IDataRecord dr, string fieldname)
{
int ordinal = dr.GetOrdinal(fieldname);
return dr.GetNullableInt32(ordinal);
}
对于每种类型,我都需要进行处理等等。
我想将这些重新实现为通用方法,部分原因是为了减少冗余,部分原因是为了学习如何编写通用方法。
我已经写了这个:
public static Nullable<T> GetNullable<T>(this IDataRecord dr, int ordinal)
{
Nullable<T> nullValue = null;
return dr.IsDBNull(ordinal) ? nullValue : (Nullable<T>) dr.GetValue(ordinal);
}
只要 T 是值类型,该方法就有效,但如果 T 是引用类型,它就无效。
如果 T 是值类型,此方法需要返回 Nullable 类型,否则默认为 default(T)。如何实现这种行为?