类型&#39; T1&#39;必须是不可为空的值类型才能将其用作参数&#39; T&#39;在泛型类型或方法中,System.Nullable <t>&#39;

时间:2016-07-09 11:16:29

标签: c# generics

这里我收到错误

类型&#39;字符串&#39;必须是不可为空的值类型才能将其用作参数&#39; T1&#39;在泛型类型或方法中&#39; GetDataKeyValue(System.Web.UI.WebControls.GridView,int,string)&#39;

String Process = GetDataKeyValue<String>(gvTargetRate, RowIndex, "Process");

这里我收到错误

类型&#39; T1&#39;必须是不可为空的值类型才能将其用作参数&#39; T&#39;在通用类型或方法中,System.Nullable&#39;

private Nullable<T> GetDataKeyValue<T>(GridView gv, int RowIndex, T column)
{
    if (column == null)
        return default(T);

    return (T)gv.DataKeys[RowIndex].Values[column];
}

2 个答案:

答案 0 :(得分:0)

您无法使用任何类型创建Nullable<>。正如编译器告诉您的那样,您只能对值类型执行此操作。由于该方法不限于任何类型,因此无法确定您是否会将其传递给对象。

实际上,正如this question and its answer中所解释的那样,你想要的是不可能的。

顺便说一句,根据定义,T不是可空类型,因此default(T)在值类型的情况下将成为非空值。 string在对象上,因此如果不使用Nullable<T>,它就可以为null。

答案 1 :(得分:0)

Nullable类型要求T是不可为空的值类型,例如int或DateTime。像string这样的引用类型已经可以为null。允许像Nullable这样的东西是没有意义的,所以不允许这样做。

more info.

相关问题