关于C#:使用string.empty有害吗?

Can using string.Empty be harmful?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
In C#, should I use string.Empty or String.Empty or “” ?

我刚刚在这个问题/答案中偶然发现了以下句子:

As of the C# 2.0 compiler, there is
very little point to String.Empty
anyway, and in fact in many cases it's
a pessimisation, since the compiler
can inline some references to "" but
can't do the same with String.Empty.

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

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


Is this statement true?

Interning的要点是共享引用以节省内存并缩短比较时间(引用比较非常快)。由于String.EmptyString类上的static readonly字段,因此它的所有用途都具有相同的引用。因此,String.Empty已经被有效地拘留了(请注意,我说的"有效地"并且特别注意,它没有被拘留在你的组件中使用"")。

Should we therefore always use "" instead of string.Empty?

就我个人而言,我发现String.Empty的可读性要大得多。使用你喜欢的。如果存在任何性能差异,则不太可能成为瓶颈。


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

看起来这是纯粹的偏好(至少在微软版本的clr上)。有人知道莫诺吗?


你几乎应该总是使用一个更容易阅读的。在实践中,潜力几乎不重要。

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

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

如果您以编译器理解的方式将""与其他常量结合起来,可能会在编译时评估整个表达式。它可能不会用不恒定的String.Empty来实现这一点。但我想不出一个在实践中有意义的例子。

例子:

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

可能比:

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

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

1
string s ="AB";

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