繁体   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