C#可空字符串错误

Mik*_*den 136 c# nullable

private string? typeOfContract
{
  get { return (string?)ViewState["typeOfContract"]; }
  set { ViewState["typeOfContract"] = value; }
}
Run Code Online (Sandbox Code Playgroud)

稍后在代码中我使用它如下:

typeOfContract = Request.QueryString["type"];
Run Code Online (Sandbox Code Playgroud)

typeOfContract在行声明的声明中收到以下错误:

类型'string'必须是不可为空的值类型,以便在泛型类型或方法'System.Nullable <T>'中将其用作参数'T'

有任何想法吗?基本上,我想确保在执行操作之前"type"存在QueryString.

Joe*_*Joe 304

System.String是一个引用类型,已经"可以为空".

Nullable <T>和?后缀用于值类型,如Int32,Double,DateTime等.

  • 有一点需要注意:Nullable <T>本身就是一个值类型,但"struct"泛型类型约束只包含不可为空的值类型 - 所以你不能做Nullable <Nullable <int >>. (13认同)

jop*_*jop 39

你让它变得复杂.string已经可以为空了.你不需要让它可空.取出?房产类型.


Szy*_*zga 19

string不能是Nullable的参数,因为string不是值类型.String是引用类型.

string s = null; 
Run Code Online (Sandbox Code Playgroud)

是一个非常有效的声明,不需要让它可以为空.

private string typeOfContract
    {
      get { return ViewState["typeOfContract"] as string; }
      set { ViewState["typeOfContract"] = value; }
    }
Run Code Online (Sandbox Code Playgroud)

因为as关键字应该工作.


csg*_*ero 13

String是一种引用类型,因此您不需要(也不能)Nullable<T>在此处使用.只需将typeOfContract声明为字符串,只需在从查询字符串中获取null后检查是否为null.或者如果要处理与null相同的空字符串值,请使用String.IsNullOrEmpty.