135
private string? typeOfContract
{
  get { return (string?)ViewState["typeOfContract"]; }
  set { ViewState["typeOfContract"] = value; }
}

稍后在代码中我像这样使用它:

typeOfContract = Request.QueryString["type"];

我在声明typeOfContract行时收到以下错误:

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

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

4

5 回答 5

303

System.String 是一个引用类型,并且已经“可为空”。

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

于 2008-10-09T14:05:47.120 回答
39

你把事情弄复杂了。string已经可以为空。你不需要让它可空。取出?属性类型。

于 2008-10-09T14:06:30.457 回答
19

string 不能作为 Nullable 的参数,因为 string 不是值类型。字符串是引用类型。

string s = null; 

是一个非常有效的语句,不需要使它可以为空。

private string typeOfContract
    {
      get { return ViewState["typeOfContract"] as string; }
      set { ViewState["typeOfContract"] = value; }
    }

应该因为as关键字而起作用。

于 2008-10-09T14:08:13.603 回答
13

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

于 2008-10-09T14:08:17.443 回答
4

对于可为空?的,与所有C# 原语一起使用,字符串除外。

以下页面提供了C# 原语列表:http : //msdn.microsoft.com/en-us/library/aa711900 (v=vs.71).aspx

于 2012-05-16T13:51:19.223 回答