可能重复:
In C#, should I use string.Empty or String.Empty or “” ?
我只是偶然发现了this question/answer中的以下句子:
从C#2.0编译器开始,有 很少指向
String.Empty
无论如何,事实上在很多情况下它都是 自编译器以来的悲观情绪 可以内联一些""
的引用但是 不能对String.Empty
执行相同操作。
这句话是真的吗?因此,我们应该始终使用""
代替string.Empty
吗?
请注意:我不会询问任何编码样式指南(更容易阅读)。我想知道是否存在功能差异(例如内联)。
答案 0 :(得分:3)
这句话是真的吗?
实习的目的是共享参考以节省内存并缩短比较时间(参考比较快速)。由于String.Empty
是static 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
添加一个特殊情况,用""
替换它,在这种情况下根本没有区别。