2008-10-09 88 views
135
private string? typeOfContract 
{ 
    get { return (string?)ViewState["typeOfContract"]; } 
    set { ViewState["typeOfContract"] = value; } 
} 

代码后来我用这样的:C#可空字符串错误

typeOfContract = Request.QueryString["type"]; 

我收到以下错误在typeOfContract行的声明指出:

类型“字符串“必须是非空值类型,以便在通用类型或方法中使用 它作为参数'T' 'System.Nullable < T>'

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

回答

303

System.String是一个引用类型,它已经是“可空”的。

Nullable < T> and the?后缀是值类型,如Int32,Double,DateTime等。

+13

有一点需要注意:可空是值类型本身,而是“结构”泛型类型约束仅包含非空值类型 - 所以你不能做Nullable >。 – 2008-10-09 14:18:05

39

您正在使其变得复杂。 string已经可以为空。您无需制作更多即可。取出物业类型上的?

19

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

string s = null; 

是一个非常有效的声明,并且不需要使其可以为空。

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

应该因为关键字的工作。

13

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