非可空字符串初始化为空

时间:2011-10-19 13:48:29

标签: c# string initialization

我试图理解为什么不可为空的字符串初始化为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之外,是否存在强制此行为的标准方法?

4 个答案:

答案 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;

这种方式是一次性初始化,而不是检查每个请求。

相关问题