【发布时间】:2009-06-22 16:27:39
【问题描述】:
【问题讨论】:
【问题讨论】:
public sealed class String {
//...
public static readonly String Empty = "";
//...
}
当你想表示没有价值时,使用null;
当你想表示有一个值,但该值是一个空字符串时,使用String.Empty。
【讨论】:
null 是指does not exist 还是exists but is unknown 取决于您在程序中使用它的方式,开发人员应该使代码清晰或记录下来。但肯定绝对不应该有 String.Unknown,因为它不属于 String 类。
String.Empty 因为它是一个静态变量,而不是 "" 必须创建一个新字符串,而 null 意味着您必须将字符串设置为等于字符串的新实例。
(感谢指正)
【讨论】:
是的。还有String.Empty,不过请don't worry about it。
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/en-us/library/system.string.empty.aspx
该字段的值是零长度字符串,""。
在应用程序代码中,此字段最常用于将字符串变量初始化为空字符串的赋值。要测试字符串的值是否为 String..::.Empty,请使用 IsNullOrEmpty 方法。
【讨论】:
他们是平等的。但是 String.Empty 是常量。
"" - 是创建 String 的方式。
【讨论】:
【讨论】: