[英]C# nullable string error
private string? typeOfContract
{
get { return (string?)ViewState["typeOfContract"]; }
set { ViewState["typeOfContract"] = value; }
}
稍后在代碼中我像這樣使用它:
typeOfContract = Request.QueryString["type"];
我在typeOfContract
行的聲明中收到以下錯誤:
類型“字符串”必須是不可為空的值類型,以便將其用作泛型類型或方法“System.Nullable<T>”中的參數“T”
有任何想法嗎? 基本上,我想在執行操作之前確保QueryString
存在"type"
。
System.String 是一種引用類型並且已經“可為空”。
Nullable<T> 和 ? 后綴用於值類型,例如 Int32、Double、DateTime 等。
你讓它變得復雜。 string
已經可以為空。 你不需要讓它更可空。 取出?
在屬性類型上。
string 不能作為 Nullable 的參數,因為 string 不是值類型。 字符串是一種引用類型。
string s = null;
是一個非常有效的語句,不需要讓它可以為空。
private string typeOfContract
{
get { return ViewState["typeOfContract"] as string; }
set { ViewState["typeOfContract"] = value; }
}
由於as關鍵字,應該可以工作。
String 是一種引用類型,因此您不需要(也不能)在此處使用Nullable<T>
。 只需將 typeOfContract 聲明為字符串,並在從查詢字符串中獲取它后簡單地檢查是否為 null。 或者,如果要處理與 null 相同的空字符串值,請使用 String.IsNullOrEmpty。
對於可為空,使用?
使用除字符串之外的所有C# 原語。
以下頁面提供了C# 原語列表: http : //msdn.microsoft.com/en-us/library/aa711900( v = vs.71).aspx
請注意,在即將發布的 C# 版本 8 中,答案是不正確的。
All the reference types are non-nullable by default
, All the reference types are non-nullable by default
,您實際上可以執行以下操作:
public string? MyNullableString;
this.MyNullableString = null; //Valid
然而,
public string MyNonNullableString;
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning.
這里重要的是顯示代碼的意圖。 如果“意圖”是引用類型可以為空,則對其進行標記,否則將空值分配給不可為空會導致編譯器警告。
對於正在刪除所有答案的版主,請不要這樣做。 我堅信這個答案會增加價值,而刪除只會讓某人不知道當時什么是正確的。 由於您已刪除所有答案,因此我將在此處重新發布答案。 發送的關於“重復”的鏈接只是一些人的開場白,我認為這不是官方推薦。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.