我想让以下功能起作用:
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;
}
当然,没有对T类型的约束,即使在这种情况下应该允许它也不想返回null。 我该如何纠正这个功能? (或者,如果有更好的方法,请告诉我。)
知道,我会采用的方法:
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上找到实现:
答案 0 :(得分:1)
您唯一的选择是return default(T);
答案 1 :(得分:0)
我在这里找到了一个类似的问题,似乎是一个很好的回答:
Nullable type as a generic parameter possible?
Nullable<T> GetRowVal<T>(System.Data.DataRow dr, string fieldName)
因为签名可以起作用。