关于c#:String.Empty与“”和null之间的区别是什么?

What is the difference between String.Empty and “” and null?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between String.Empty and “”

""是否等同于String.Empty

哪个是初始化字符串值的首选项?


1
2
3
4
5
public sealed class String {
    //...
    public static readonly String Empty ="";
    //...
}

当你想表示没有价值时,使用null

当您想表示有一个值,但该值是一个空字符串时,请使用String.Empty


空,因为它是一个静态变量,而不是"必须创建一个新的字符串,而空则意味着必须将该字符串设置为一个新的字符串实例。

(感谢更正)


对。还有绳子。空的,但请不要担心。

The difference between String.Empty and"" are pretty small, but there is a
difference. "" actually creates an
object, it will likely be pulled out of the string intern pool and String.Empty creates no object, so if you are really looking for ultimate
memory efficiency, I suggest String.Empty.
However, you should keep in mind the difference is so trival you will
like never see it in your code…


用你认为最可读的。

我向任何人提出挑战,要找到一个实际的应用程序,其中存在显著的性能差异…这是不会发生的。然而,不同的人发现不同的方法更易读。

就我个人而言,我是一个江户人。我发现它不那么杂乱,而且我从来没有遇到过一个问题,我实际上是不小心使用了""或类似的东西。(这是经常提出的反对意见之一。)

如果你喜欢String.Empty,我肯定不会说你"错"。不过,我建议,如果你在一个团队中工作,你应该讨论一下,找出大多数人认为什么更具可读性,并坚持下去。一致性通常是一件好事。

编辑:只是为了减轻一些担心,这些担心可能是由"将创建一个新字符串…它可能会创建一个新的字符串(可能是每个AppDomain,也可能是每个进程;我不确定,实际上也不重要)。它不会每次使用新字符串。例如,考虑以下代码:

1
2
3
4
5
6
7
8
9
10
public void Foo()
{
    string x ="";
    for (int i=0; i < 10000000; i++)
    {
        string y ="";
        // Do something here
    }
    string z ="";
}

你方保证,xyz将指同一字符串。至多,调用Foo意味着只创建了一个空字符串,并且只有在您第一次调用它时,并且仅当您还没有在程序中的任何其他地方使用空字符串文字时。上面的代码不会创建1000万个新字符串。


最好使用string.empty,但它们实际上是相等的。但是,它们与空值不同。


你要找的答案在这里。

string.empty和"(empty string)有什么区别?

使用string.empty


他们是平等的。但string.empty是常量。

"—是创建字符串的方法。


从http://msdn.microsoft.com/en-us/library/system.string.empty.aspx

此字段的值是零长度字符串""。

在应用程序代码中,此字段最常用于将字符串变量初始化为空字符串的赋值。若要测试字符串的值是否为字符串..::.Empty,请使用IsNullOrEmpty方法。