使用 string.Empty 会有害吗? [重复]

问题描述 投票:0回答:3

可能重复:
在 C# 中,我应该使用 string.Empty 还是 String.Empty 还是“”?

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

从 C# 2.0 编译器开始,有 很少有指向

String.Empty
无论如何,事实上在很多情况下 悲观,因为编译器 可以内联一些对
""
的引用,但是 无法对
String.Empty
做同样的事情。

这个说法属实吗?因此,我们是否应该始终使用

""
而不是
string.Empty

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

c# .net performance c#-4.0
3个回答
3
投票

这个说法属实吗?

实习的目的是共享引用以节省内存并减少比较时间(引用比较速度非常快)。由于

String.Empty
static readonly
类中的
String
字段,因此它的所有使用都已经共享相同的引用。因此,
String.Empty
已经被有效地保留(请注意,我说的是“有效”,并特别注意,它没有在程序集中使用
""
而被保留)。

因此我们是否应该始终使用

""
而不是
string.Empty

我个人认为

String.Empty
更具可读性。使用你喜欢的。如果存在任何性能差异,那么它不太可能成为瓶颈。


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

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


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
添加了一个特殊情况,将其替换为
""
,在这种情况下根本没有区别。

© www.soinside.com 2019 - 2024. All rights reserved.