我想做这样的事情:
myYear = record.GetValueOrNull<int?>("myYear"),
请注意,可为null的类型作为通用参数。
由于GetValueOrNull
函数可以返回null,因此我的第一次尝试是:
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : class
{
object columnValue = reader[columnName];
if (!(columnValue is DBNull))
{
return (T)columnValue;
}
return null;
}
但是我现在得到的错误是:
类型“ int?” 必须是引用类型,才能在通用类型或方法中将其用作参数“ T”
对!Nullable<int>
是一个struct
!所以我尝试将类约束更改为struct
约束(并且副作用不再返回null
):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
现在分配:
myYear = record.GetValueOrNull<int?>("myYear");
给出以下错误:
类型“ int?” 必须为非空值类型,才能在通用类型或方法中将其用作参数“ T”
是否可以将可空类型指定为通用参数?
IDataRecord
从DbDataRecord
..