答案 0 :(得分:27)
public sealed class String {
//...
public static readonly String Empty = "";
//...
}
如果您想表示没有值,请使用null
;
如果要表示存在值,请使用String.Empty
,但该值为空字符串。
答案 1 :(得分:10)
String.Empty因为它是一个静态变量,而不是“”必须创建一个新字符串,而null意味着你必须将字符串设置为等于一个新的字符串实例。
(感谢更正)
答案 2 :(得分:8)
是。和String.Empty,但请don't worry about it。
String.Empty和“”之间的区别非常小,但有一个 区别。 “”实际上创造了一个 对象,它可能会被拉出字符串实习池,而String.Empty不会创建任何对象,所以如果你真的在寻找终极 内存效率,我建议String.Empty。 但是,你应该记住差异是如此微不足道 从来没有在你的代码中看到它......
答案 3 :(得分:6)
使用您认为最具可读性的。
我挑战任何人找到一个现实应用程序,其中存在显着的性能差异......它不会发生。但是,不同的人发现不同的方法更具可读性。
就个人而言,我是""
人。我发现它不那么杂乱,我从来没有遇到过一个问题,即我实际意外地使用了" "
(或类似的东西)。 (这是经常提出的反对意见之一。)
如果您更喜欢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万个新字符串。
答案 4 :(得分:4)
使用string.Empty被认为是更好的做法,但它们实际上是相等的。但是,它们与null不同。
答案 5 :(得分:1)
这 http://msdn.microsoft.com/en-us/library/system.string.empty.aspx
此字段的值是零长度字符串“”。
在应用程序代码中,此字段最常用于分配以将字符串变量初始化为空字符串。要测试字符串的值是否为String .. ::。Empty,请使用IsNullOrEmpty方法。
答案 6 :(得分:1)
他们是平等的。但是String.Empty是不变的。
“” - 是创建String的方法。
答案 7 :(得分:1)