我试图理解为什么不可为空的字符串初始化为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之外,是否存在强制此行为的标准方法?
答案 0 :(得分:24)
没有“非可空字符串”这样的东西。
String是引用类型,因此其默认值确实为null。
您可以通过在类(foo)的构造函数中将值设置为String.Empty
来解决此问题。
答案 1 :(得分:11)
字符串是引用类型,它始终可以为空。
答案 2 :(得分:3)
String是引用类型 - 默认情况下,值初始化为null
。
您可以将构造函数中的字符串初始化为string.Empty
,最好这样做,因为:
null
值表示“我不知道价值是多少”string.Empty
表示“价值为空”或“价值不存在”。因此,几乎每个字符串属性都应该(由你)初始化为string.Empty
值。尝试阅读有关“空对象模式”的内容。根据这个原则编程使代码更具可读性和防错性。
答案 3 :(得分:0)
由于您使用属性来获取字符串值,因此另一个选项是返回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;
这种方式是一次性初始化,而不是检查每个请求。