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'
建议我如何使用字符串,因为我想使用字符串而不是其他
答案 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;等类型无效或任何引用类型作为通用参数。