String.Empty和""和null之间有什么区别?

Joa*_*nge 14 .net c#

可能重复:
String.Empty和""之间有什么区别

""相当于String.Empty

哪个首选字符串值是首选?

yfe*_*lum 27

public sealed class String {
    //...
    public static readonly String Empty = "";
    //...
}
Run Code Online (Sandbox Code Playgroud)

使用null时,你要代表没有价值;

使用String.Empty时要表示不存在是一种价值,但价值是一个空字符串.

  • 相当重要的是,它也是只读:) (8认同)
  • null是否意味着不存在或存在但未知,这取决于您在程序中使用它的方式,开发人员应清除代码或对其进行记录。但是应该绝对没有绝对的String.Unknown,因为它不属于String类。 (2认同)

Cod*_*313 10

String.Empty因为它是一个静态变量,而不是必须创建新字符串的"",而null意味着必须将字符串设置为等于字符串的新实例.

(感谢更正)

  • 从技术上讲,String.Empty不是常量.这是一个静态的只读字段.如果它是常量,那么""和string.Empty之间没有区别. (3认同)
  • 请注意,"**可能*创建一个额外的字符串*一次*.它不像每次绕过代码时都会创建一个新的字符串. (2认同)

Mat*_*hen 8

是.和String.Empty,但请不要担心.

String.Empty和""之间的区别非常小,但是有区别.""实际上创建了一个对象,它可能会被拉出字符串实习池,而String.Empty不会创建任何对象,所以如果你真的在寻找最终的内存效率,我建议使用String.Empty.但是,你应该记住差异是如此微不足道,你将永远不会在你的代码中看到...


Jon*_*eet 6

使用您认为最具可读性的.

我挑战任何人找到一个真实的应用程序,其中有显着的性能差异......它不会发生.然而,不同的人发现不同的方法更具可读性.

就个人而言,我是一个""人.我觉得它更简洁,而且我从来没有遇到过,我的问题其实使用" "(或类似的东西)意外.(这是经常提出的反对意见之一.)

如果你愿意string.Empty,我肯定不会声称你"错了".但是,我建议,如果你在一个团队工作,你会讨论它,以找出大多数人认为更具可读性的东西,并坚持这一点.一致性通常是一件好事.

编辑:只是为了消除可能由""创建一个新字符串...的声明引起的一些恐惧...它可能会创建一个新字符串一次(可能每个AppDomain,可能每个进程;我不确定,它确实没有'无所谓).它不会创建一个新的字符串每次使用它的时候.例如,考虑以下代码:

public void Foo()
{
    string x = "";
    for (int i=0; i < 10000000; i++)
    {
        string y = "";
        // Do something here
    }
    string z = "";
}
Run Code Online (Sandbox Code Playgroud)

你可以保证x,y并且z会引用相同的字符串.最多,调用Foo将意味着创建一个空字符串,并且仅在您第一次调用它时,并且仅当您尚未在程序中的任何其他位置使用空字符串文字时.上面的代码不会创建1000万个新字符串.


Ed *_*mes 5

使用 string.Empty 被认为是更好的做法,但它们实际上是相等的。但是,它们与 null 不同。