簡體   English   中英

不可為空的字符串初始化為Null

[英]Non-Nullable String Initializes as Null

我試圖理解為什么非空字符串初始化為null而不是空字符串。 例如:

//Property of class foo
public string Address_Notes { get; set; }

//Create instance of foo
foo myFoo = new foo();

//Get value of Address_Notes
var notesValue = myFoo.Address_Notes; //Returns null

我以為不可為空的字符串的值應默認為String.Empty感到瘋狂嗎? 除了自定義getter之外,是否有強制這種行為的標准方法?

沒有“不可為空的字符串”之類的東西。

字符串是引用類型,因此其默認值確實為null。

您可以通過在類(foo)的構造函數中將值設置為String.Empty來解決此問題。

字符串是引用類型,始終為可為空。

字符串是引用類型-默認情況下,值初始化為null

您可以將構造函數中的字符串初始化為string.Empty ,並且這樣做是最佳實踐,因為:

  • null值表示“我不知道值是多少”
  • string.Empty表示“值為空”或“值不存在”。

因此,幾乎每個字符串屬性都應(由您)初始化為string.Empty值。 嘗試閱讀有關“空對象模式”的內容。 根據此原理進行編程可以使代碼更具可讀性和防錯性。

由於您使用屬性來獲取字符串值,因此另一個選擇是返回string.Empty(如果實際上為null)。

//Property of class foo
private string _address_Notes;
public string Address_Notes 
{ 
    get { return _address_Notes ?? string.Empty; } 
    set { _address_Notes = value; }
}

更好的解決方案是將字符串初始化為string.Empty(如果這是您的預期行為)。 您可以在C#6+中執行以下操作:

public string Address_Notes { get; set; } = string.Empty;

這樣,它是一次性的初始化,而不是對每個請求的檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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