如何将数据行字段转换为泛型类型?
问题描述:
我想作以下功能工作:如何将数据行字段转换为泛型类型?
T GetRowVal<T>(System.Data.DataRow dr, string fieldName)
{
var type=typeof(T);
var val = dr[fieldName];
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
if (val == DBNull.Value || val == null) return null;
return (T)val;
}
当然,它并不想返回null即使它应该在这种情况下所允许的T类没有限制。 我该如何纠正这个功能? (或者如果有更好的方法来做到这一点,请让我知道)。
因为知道,这种方法我会用:
T GetRowVal<T>(System.Data.DataRow dr, string fieldName)
{
var type=typeof(T);
var val = dr[fieldName];
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
if (val == DBNull.Value || val == null) return default(T);
return (T)val;
}
新的解决方案:)
return dr.Field<T>(fieldName);
不知道它在性能方面更好,但可能看起来清洁器。
实施,可以在MS Github上找到:
答
你唯一的选择是return default(T);
答
我发现了一个类似的问题,用什么似乎是这里良好的反应:
Nullable type as a generic parameter possible?
Nullable<T> GetRowVal<T>(System.Data.DataRow dr, string fieldName)
作为签名可以工作。
+0
问题是,如果该类型不是Nullable,我猜可能需要在强制转换或调用.Value之后进行强制转换。 – Jean
这似乎是一个不错的选择:) – Jean