簡體   English   中英

C#可為空的字符串錯誤

[英]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 defaultAll 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM