DataRow的通用字段getter

A.B*_*uin 4 c# generics ado.net extension-methods datarow

我尝试使用此通用方法扩展DataRow对象:

public static T? Get<T>(this DataRow row, string field) where T : struct
{
  if (row.IsNull(field))
    return default(T);
  else
    return (T)row[field];
}
Run Code Online (Sandbox Code Playgroud)

它的做工精细当T int,decimal,double,等.

但是当我尝试使用字符串时,我有这个错误:

"类型'字符串'必须是不可为空的值类型,以便在泛型类型或方法'System.Nullable'中将其用作参数'T'"

我怎么能纠正这个?

我知道字符串不是结构,但如果字符串字段是DBNull,我不会返回null.

bri*_*ler 6

我认为这就是你想要的:

public static T? GetValue<T>(this DataRow row, string field) where T : struct
{
    if (row.IsNull(field))
        return new T?();
    else
        return (T?)row[field];
}

public static T GetReference<T>(this DataRow row, string field) where T : class
{
    if (row.IsNull(field))
        return default(T);
    else
        return (T)row[field];
}
Run Code Online (Sandbox Code Playgroud)


slo*_*oth 5

string不是一个struct,而是一个class.这就是错误消息告诉您的内容.只需删除约束.

也许你想看一下DataRowExtensions.