为什么string.Empty比.Net中的“”效率更高

时间:2009-12-11 11:24:56

标签: .net string

我确信string.Empty比在.Net语言中使用“”更有效。我想知道的是为什么效率更高?

7 个答案:

答案 0 :(得分:13)

我认为在大多数情况下没有区别。在正常情况下,当您在代码中使用""时,此字符串将被实现,并且将重用相同的字符串实例。因此,与""相比,使用String.Empty时不会有更多的字符串实例。

如果你想要证明:

Dim a As String
Dim b As String

a = ""
b = ""

Console.WriteLine(Object.ReferenceEquals(a, b)) ' Prints True '

如果您使用True替换其中一个代码,上面的代码也会打印String.Empty,因此您甚至可以混合这些方法而无需创建额外的字符串实例。

底线:不同的是个人品味。

答案 1 :(得分:6)

首先,我不确定它是否更有效率。它是静态的原因是,它基本上是一个常量:只有一个空字符串。

更重要的一个问题是.NET中的字符串实习存在一些不一致,这可能导致与String.empty的比较并不总是返回预期的结果,具体取决于您正在使用的运行时版本。 Eric Lippert撰写了一篇关于它的精彩博文here

(摘自Eric的帖子)

object obj = "";
string str1 = "";
string str2 = String.Empty;
Console.WriteLine(obj == str1); // true
Console.WriteLine(str1 == str2); // true
Console.WriteLine(obj == str2); // sometimes true, sometimes false?!

答案 2 :(得分:2)

我认为使用string.Empty超过“”没有任何性能提升。

只需 个人偏好

答案 3 :(得分:2)

""将在您的应用程序中创建一个空字符串的实例。当然,.NET实现字符串常量,但仍然会创建一个实例。另一方面,String.Empty不会创建任何实例。

答案 4 :(得分:1)

如果您喜欢阅读一些基于汇编程序的证据,以下帖子可能很有趣:In C#, should I use string.Empty or String.Empty or "" to intitialize a string?

实际上,整个帖子中都有一些有趣的答案。

答案 5 :(得分:1)

Pre 2.0,String.Empty更有效率是正确的,但是因为没有区别。见What is the difference between String.Empty and "" (empty string)?

答案 6 :(得分:0)

string.Empty是一个已构造的单例静态常量字符串,但“”将创建一个空的新字符串。