【问题标题】:The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'类型“字符串”必须是不可为空的值类型,才能将其用作泛型类型或方法“System.Nullable<T>”中的参数“T”
【发布时间】:2013-09-18 01:04:44
【问题描述】:
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
类型“字符串”必须是不可为空的值类型才能按顺序 将其用作泛型类型或方法中的参数“T” 'System.Nullable'

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

【问题讨论】:

  • 只使用global::System.String fromDate
  • 不要在 xsd 文件下扩展自动生成的designer.cs 文件。而是创建另一个具有相同名称的文件(没有设计器)并使用 partial 关键字扩展 TableAdapter 类。这是因为自动生成的类也是partialdesigner.cs 文件将在设计器中的下一次更改时重新创建,您的所有更改都将丢失。
  • Nullable&lt;T&gt; 用于将无法保存null 值的类型“放大”为可以保存的类型。 String 已经是可以保存 null 值的类型。因此您不能使用Nullable&lt;string&gt; 的组合。 (你可以在这里阅读Nullable&lt;T&gt;msdn.microsoft.com/en-us/library/b3h38hb0.aspx)。简而言之,只需将您的方法原型变成这样:public virtual int Fill((DataSetservices.Jobs_detailsDataTable dataTable, string fromdate, DateTime? todate);
  • 您是否有许多不同的类型/命名空间,称为SystemNullableStringDateTime 等等,因为您使用了这么多global namespace aliases

标签: c# string dataset nullable


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    String Class 是一个类,它不是 structSystem.Int32 或其他原始类型。它可以保存空值。 Nullable&lt;T&gt; 适用于值类型。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多