可以使用string.Empty有害吗?

时间:2011-06-10 13:58:50

标签: c# .net performance compiler-construction c#-4.0

  

可能重复:
  In C#, should I use string.Empty or String.Empty or “” ?

我只是偶然发现了this question/answer中的以下句子:

  

从C#2.0编译器开始,有   很少指向String.Empty   无论如何,事实上在很多情况下它都是   自编译器以来的悲观情绪   可以内联一些""的引用但是   不能对String.Empty执行相同操作。

这句话是真的吗?因此,我们应该始终使用""代替string.Empty吗?

请注意:我不会询问任何编码样式指南(更容易阅读)。我想知道是否存在功能差异(例如内联)。

3 个答案:

答案 0 :(得分:3)

  

这句话是真的吗?

实习的目的是共享参考以节省内存并缩短比较时间(参考比较快速)。由于String.Emptystatic readonly类中的String字段,因此对它的所有使用都已共享相同的引用。因此,String.Empty已经有效实施(请注意,我说“有效”并特别注意,它并未在您的程序集中使用""。)

  

因此,我们是否应始终使用""代替string.Empty

我个人认为String.Empty更具可读性。用你喜欢的。如果存在任何性能差异,则不太可能成为瓶颈。

答案 1 :(得分:1)

Console.WriteLine (ReferenceEquals ("", string.Empty) ? "Same Reference" : "Different Reference");
// Prints "Same Reference"

看起来它纯粹是偏好(至少在微软的CLR版本上)。有人知道MONO吗?

答案 2 :(得分:0)

您几乎应该总是使用更容易阅读的那个。在实践中,潜力很少发生。

IMO ""更容易/更清晰。但其他人更喜欢String.Empty。所以这主要是风格问题。

你引用的表现部分似乎有道理。 ""是一个编译时常量,将被实习。 String.Empty是一个静态只读字段。除非C#编译器程序员特别注意在编译时将String.Empty替换为"",否则在某些罕见的情况下可能会稍慢一些。 ""的所有用法将共享同一个实例,我希望String.Empty指向同一个实例。

如果以编译器理解的方式将""与其他常量组合在一起,它可能会在编译时评估整个表达式。 String.Empty可能不会那样做,这不是常数。但我想不出一个在实践中有意义的例子。

示例:

string s = ""+"A"+""+"B"+"";

可能比以下更快:

string s = string.Empty+"A"+string.Empty+"B"+string.Empty;

但当然任何理智的人都会写:

string s = "AB";

但是,C#程序员可能会为String.Empty添加一个特殊情况,用""替换它,在这种情况下根本没有区别。

相关问题