我确信string.Empty比在.Net语言中使用“”更有效。我想知道的是为什么效率更高?
答案 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是一个已构造的单例静态常量字符串,但“”将创建一个空的新字符串。