2008-10-09 89 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。