String.Empty与“”

时间:2010-05-25 14:05:20

标签: c#

  

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

String.Empty""的区别如何?

5 个答案:

答案 0 :(得分:78)

根据Brad Abrams

  

正如大卫所暗示的,存在差异   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);
    }
}

这表明当您的代码开始运行时,""String.Empty都会被实现,这意味着在所有实际目的中它们都是相同的。

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

  

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

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

答案 1 :(得分:77)

没有什么不同。

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

  

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

     

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

答案 2 :(得分:14)

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

答案 3 :(得分:9)

没有区别。有些人更喜欢使用String.Empty来实现代码可读性。使用你习惯使用的那个。

答案 4 :(得分:1)

string.Empty 始终是同一个对象

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

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

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

转换为

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