String.Empty与""

Piy*_*ush 93 c#

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

有什么String.Empty不同""

Mic*_*ers 81

它并没有什么不同.

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

该字段的值是零长度字符串"".

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

  • 在.NET 1时代,情况有所不同。因此,您将看到仍在使用的旧代码中的String.Empty,并且是在.NET 1时代受其折磨的老同学们的反思性输入。善待; 它留下了印记。 (5认同)

And*_*est 81

根据布拉德艾布拉姆斯的说法:

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

至于System.String.Empty或string.Empty或String.Empty ......我的护理水平很低;-)

更新(2015年6月3日):

在评论中已经提到2003年的上述引用不再正确(我假设这是指""实际创建对象的语句).所以我在C#5(VS 2013)中创建了几个简单的控制台程序:

class Program
{
    static void Main()
    {
        // Outputs "True"
        Debug.WriteLine(string.IsInterned(string.Empty) != null);
    }
}

class Program
{
    static void Main()
    {
        // Outputs "True"
        Debug.WriteLine(string.IsInterned("") != null);
    }
}
Run Code Online (Sandbox Code Playgroud)

这表明,无论""String.Empty您的代码时开始运行,这意味着对于所有的实际目的,它们是相同的都是实习..

Brad评论中最重要的部分是:

你应该记住差异是如此微不足道,你将永远不会在你的代码中看到它...

这是底线.在""和String.Empty之间进行选择不是基于性能的决策. 不要浪费很多时间思考它. 根据您发现的更具可读性的内容或项目中已使用的任何约定进行选择.

  • 我发现 `""` 比 `string.Empty` 更容易阅读和理解。 (4认同)
  • 我在快速构建代码原型时遇到过很多情况,我到处乱扔`""`,这后来引入了许多错误,因为*意图*不清楚:“我的意思是说:故意在此处传递空字符串”或“我是否忘记在此处传递非空字符串”。 (3认同)
  • 键入两个引号比 String.Empty 快得多。两个引号是跨平台的。这是一个没有脑子。 (2认同)

jam*_*one 13

String.Empty is identical to ""然而,在大多数情况下,通常我发现它更容易使用String.IsNullOrEmpty(str)而不必比较str == "" || str == null另外如果你在.NET 4.0上String.IsNullOrWhiteSpace(str)覆盖更多的情况,并且是迄今为止最好的.

  • 你错过了这一点:`String.IsNullOrEmpty(str)`与`string.Empty`无关,除了空字出现在两个地方. (48认同)
  • `str == "" || str == null` 对我来说看起来相当无效,因为首先评估左侧。这是使用“IsNullOrEmpty”方法的另一个原因:-) (2认同)

Jos*_*ola 10

没有区别.有些人更喜欢String.Empty用于代码可读性目的.使用您习惯使用的那个.

  • 在我看来,String.Empty 并不容易阅读。我不喜欢。我总是用“”。我们对非空字符串文字使用双引号,因此为了保持一致,我们也应该对字符串文字使用双引号。 (3认同)

Mar*_*rks 5

string.Empty始终是同一对象

“”始终是一个新对象,垃圾收集器可能必须将其删除。

因此,您应始终使用string.empty而不是“”。

string a="";
string b=string.Empty;
Run Code Online (Sandbox Code Playgroud)

被翻译成

IL_0000:  ldstr       ""
IL_0005:  ldsfld      System.String.Empty
Run Code Online (Sandbox Code Playgroud)

  • 您是说“不使用String.Empty的主要原因是可读性”吗? (10认同)
  • 并非每次都创建一个新对象。http://en.wikipedia.org/wiki/String_interning (4认同)
  • 编译器会将它们全部“链接”到一个空字符串。 (2认同)
  • 我在某处读到(抱歉,我不记得在哪里),空字符串在每个程序集中都重复一次。因此,每个使用“””而不是“System.String.Empty”的程序集都在浪费*宝贵的内存*!;-) (2认同)