public sealed class String {
//...
public static readonly String Empty = "";
//...
}
当你想表示没有值时,请使用null
;
当你想表示有值,但值为空字符串时,请使用String.Empty
。
null
是表示 不存在
还是 存在但未知
都取决于开发人员,并且开发人员应该明确代码或进行文档注释。但是,在 String
类中绝对不应该有 String.Unknown
存在。 - yfeldblum使用String.Empty是因为它是一个静态变量,而不是""需要创建一个新字符串,而null意味着您必须将字符串设置为新的字符串实例。
(感谢更正)
是的。还有String.Empty,但请不要担心它。
String.Empty和“”之间的差异非常小,但确实存在区别。“”实际上创建了一个对象,它可能会被从字符串池中取出,而String.Empty没有创建任何对象,因此如果您真的在寻求最终的内存效率,建议使用String.Empty。但是,您应该记住,这种差异如此微不足道,以至于您几乎永远不会在代码中看到它...
使用您认为最易读的方式。
我向任何人挑战,找到一个在性能方面有显著差异的实际应用程序...这是不可能的。然而,不同的人发现不同的方法更易读。
就我个人而言,我是一个""
的人。我觉得它更简洁,而且我从来没有遇到过我意外地使用了" "
(或类似的东西)的问题。(这是经常提出的反对意见之一。)
如果您喜欢string.Empty
,我当然不会说你是“错误”的。然而,我建议如果你在一个团队中工作,你应该讨论一下,找出大多数人认为更易读的方式,并坚持这种方式。一致性通常是一件好事。
编辑: 只是为了消除一些担忧,可能会因为""会创建一个新的字符串...它可能会创建一个新的字符串一次(可能是每个AppDomain
,可能是每个进程; 我不确定,但这真的无关紧要)。每次使用它时都不会创建一个新的字符串。例如,考虑以下代码:
public void Foo()
{
string x = "";
for (int i=0; i < 10000000; i++)
{
string y = "";
// Do something here
}
string z = "";
}
x
、y
和z
将引用同一个字符串。最多,调用Foo
会创建一个空字符串,只有在第一次调用它时,并且只有在程序中尚未使用空字符串文字的情况下才会创建。上面的代码不会创建1000万个新字符串。使用string.Empty被认为是更好的做法,但它们本质上是相等的。它们与null不同。
来自http://msdn.microsoft.com/zh-cn/library/system.string.empty.aspx
该字段的值为零长度字符串,""。
在应用程序代码中,该字段最常用于赋值以将字符串变量初始化为空字符串。要测试字符串值是否为String..::.Empty,请使用IsNullOrEmpty方法。
它们是相等的。但String.Empty是常量。
"" - 是创建字符串的一种方式。