【问题标题】:String.Empty versus "" [duplicate]String.Empty 与 "" [重复]
【发布时间】:2010-05-25 14:05:20
【问题描述】:

可能重复:
What is the difference between String.Empty and “”

String.Empty"" 有何不同?

【问题讨论】:

标签: c#


【解决方案1】:

没有什么不同。

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

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

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

【讨论】:

  • 正如副本所说,它在 .NET 2 及更高版本中没有什么不同。
  • 在 .NET 1 时代,情况有所不同。因此,您会在仍在使用的旧代码中看到 String.Empty,并且这些旧代码是由 .NET 1 时代受苦的老学生反射性地输入的。善待;它留下了痕迹。
【解决方案2】:

根据Brad Abrams

正如大卫暗示的那样,有区别 String.Empty 和 "" 之间很漂亮 小,但有区别。 “” 实际上创建了一个对象,它会 可能会被拉出绳子 实习生池,但仍然……虽然 String.Empty 不创建对象……所以如果 你真的在寻找最终 在内存效率方面,我建议 字符串.空。然而,你应该 请记住,差异是如此 琐碎,你会喜欢永远看不到它 你的代码...

对于 System.String.Empty 或 string.Empty 或 String.Empty……我的关心 水平低;-)

更新(2015 年 6 月 3 日):

在 cmets 中已经提到,上面 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);
    }
}

这表明""String.Empty 在您的代码开始运行时都处于实习状态,这意味着实际上它们是相同的......

布拉德评论中最重要的部分是:

您应该记住,差异是如此微不足道,您将 就像从来没有在你的代码中看到它一样......

这是底线。在 "" 和 String.Empty 之间进行选择不是基于性能的决定。 Don't waste a lot of time thinking about it. 根据您认为更具可读性的内容或项目中已使用的约定进行选择。

【讨论】:

  • 键入两个引号比 String.Empty 快得多。两个报价是跨平台的。这很简单。
  • 我发现""string.Empty 更容易阅读和理解。
  • 我在快速原型代码的过程中遇到过很多案例,我把""到处乱扔,后来引入了很多错误,因为intent不清楚:“没有我的意思是:故意在此处传递空字符串”或“我是否忘记在此处传递非空字符串”。
  • @GeorgeChakhidze 你不需要需要 string.Empty,因为你也可以在原型设计时为空字符串引入一个单字母常量
【解决方案3】:

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

【讨论】:

  • 在我看来,String.Empty 并不容易阅读。我不喜欢它。我总是用“”。我们对非空字符串文字使用双引号,因此为了保持一致,我们也应该为字符串文字使用双引号。
【解决方案4】:

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

【讨论】:

  • 你没抓住重点:String.IsNullOrEmpty(str)string.Empty没有任何关系,只是两个地方都出现了empty这个词。
  • str == "" || str == null 对我来说看起来很无效,因为首先评估了左侧。使用IsNullOrEmpty 方法的另一个原因:-)
【解决方案5】:

string.Empty 始终是同一个对象

"" 始终是一个新对象,可能必须被垃圾收集器移除。

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

string a="";
string b=string.Empty;

被翻译成

IL_0000:  ldstr       ""
IL_0005:  ldsfld      System.String.Empty

【讨论】:

  • 不是每次都创建一个新对象。 en.wikipedia.org/wiki/String_interning
  • 编译器会将它们全部“链接”到一个空字符串。
  • 我在某处读到(对不起,我不记得在哪里)空字符串在每个程序集中重复一次。因此,每个使用"" 而不是System.String.Empty 的程序集都在浪费宝贵的内存! ;-)
  • 您的意思是“不使用 String.Empty 的主要原因是可读性”?
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多