类型'string'必须是非可空值类型才能在泛型类型或方法'System.Nullable <t>'</t>中将其用作参数'T'

时间:2013-09-17 14:34:07

标签: c# string dataset nullable

public virtual int Fill(DataSetservices.Jobs_detailsDataTable dataTable, 
    global::System.Nullable<global::System.String> fromdate,     
    global::System.Nullable<global::System.DateTime> todate)

我在C#中用dataset.xsd编写了上面的代码,但是它引发了一个错误:

  

错误1
  类型'string'必须按顺序为非可空值类型   在泛型类型或方法中将其用作参数“T”   'System.Nullable'

建议我如何使用字符串,因为我想使用字符串而不是其他

3 个答案:

答案 0 :(得分:18)

string已经可以为空,因为它是引用类型。您不需要将其包装在Nullable中以获得空值。它不仅不需要,而且根据您收到的错误消息,它甚至不是可能。只有非可空值类型可以用作Nullable的通用参数。

答案 1 :(得分:4)

String Class是一个类,它不是像struct那样的System.Int32或其他原始类型。它可以保存空值。 Nullable<T>适用于值类型。

从名称中可以看出您要存储DateTime个对象。在自己的类型中拥有DateTime总是更好。 DateTime,对于Nullable,您可以使用Nullable<DateTime>DateTime?

答案 2 :(得分:1)

如果您查看MSDN上有关Nullable<T>的文档,您会发现T受结构约束。 Constraints on Type parameters表明这样的约束将泛型参数限制为除Nullable&lt; T&gt;之外的值类型。 (请注意Nullable&lt; T&gt;是一个结构!)。

正如MSDN文档所说,string是一种引用类型,意味着为Nullable&lt; T&gt;所做的通用参数约束。将使Nullable&lt; string&gt;等类型无效或任何引用类型作为通用参数。