我刚刚在这个问题/答案中偶然发现了以下句子:
从 C# 2.0 编译器开始,有 很少有指向
无论如何,事实上在很多情况下 悲观,因为编译器 可以内联一些对String.Empty
的引用,但是 无法对""
做同样的事情。String.Empty
这个说法属实吗?因此,我们是否应该始终使用
""
而不是 string.Empty
?
请注意:我不是在询问任何编码样式指南(这更容易阅读)。我想知道是否存在功能差异(例如内联)。
这个说法属实吗?
实习的目的是共享引用以节省内存并减少比较时间(引用比较速度非常快)。由于
String.Empty
是 static readonly
类中的 String
字段,因此它的所有使用都已经共享相同的引用。因此, String.Empty
已经被有效地保留(请注意,我说的是“有效”,并特别注意,它没有在程序集中使用 ""
而被保留)。
因此我们是否应该始终使用
而不是""
?string.Empty
我个人认为
String.Empty
更具可读性。使用你喜欢的。如果存在任何性能差异,那么它不太可能成为瓶颈。
Console.WriteLine (ReferenceEquals ("", string.Empty) ? "Same Reference" : "Different Reference");
// Prints "Same Reference"
看起来这纯粹是偏好(至少在 Microsoft 版本的 CLR 上)。 有人知道MONO吗?
您几乎应该总是使用更容易阅读的。在实践中,潜力并不重要。
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
添加了一个特殊情况,将其替换为 ""
,在这种情况下根本没有区别。