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