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