5
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
​​类型“字符串”必须是不可为空的值类型,才能将其用作泛型类型或方法“System.Nullable”中的参数“T”

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

4

3 回答 3

18

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

于 2013-09-17T14:36:55.597 回答
4

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

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

于 2013-09-17T14:40:43.427 回答
1

如果您查看 MSDN 上有关Nullable<T>的文档,您会注意到 T 受结构约束。类型参数的约束表明,这种约束将泛型参数限制为除 Nullable<T> 之外的值类型(请注意 Nullable<T> 是一个结构!)。

正如 MSDN 文档所说,字符串是一种引用类型,这意味着为 Nullable<T> 制作的泛型参数约束将使 Nullable<string> 等类型或任何引用类型作为泛型参数无效。

于 2013-09-17T17:04:44.827 回答