String.Empty和string.Empty之间的区别是什么?

4
我想知道它们之间的区别以及使用它们的可能方式是什么。
5个回答

22

完全没有区别,甚至在IL级别也是一样的。在C#中,string 是指向实际的System.String .NET类型的别名。至于可能的用途,无论何时你想在应用程序中表示一个空字符串,都可以使用它。关于string.Empty""之间的区别,已经进行了很多讨论,普遍的共识是使用最适合你并使你的代码更易读的那个,这显然是主观的。


9
“var s2 = String.Empty”需要导入“System”命名空间。而“var s2 = string.Empty”则不需要。我不知道为什么要提到这一点,=) - RPM1984
2
哦,对于一个糟糕问题的好回答加一分。 - RPM1984
@RPM1984,“string”是“System.String”的别名。这就是为什么需要导入的原因。但编译器生成的IL没有任何区别。 - Darin Dimitrov
1
以前,使用对String.Empty的引用比使用""创建许多空字符串要好。每次使用""创建空字符串时,它都会为该字符串分配内存,而String.Empty已经被分配了。然而,现在的C#编译器自动执行字符串插值,所以情况并不那么糟糕了。我仍然更喜欢使用命名常量而不是魔术字符串 - 所以我总是选择String.Empty。 - Tim Roberts
@Tim - 实际上,字符串内部化是CLI提供的功能,而不是编译器提供的。 - Marc Gravell
显示剩余3条评论

3
没有区别。`string`是`System.String`的别名。

string 是 mscorlib 中 System.String 的别名。你可以在你的程序集中定义 System.String,但 string 不会改变。 - gandjustas

2
No difference, it’s just predefine text or name for compiler.

string =String (class)
int =Int32 (struct)
long= Int64 (struct)
decimal = Decimal (struct)

编译器将字符串类解释为String类,将其他类解释为相关结构。

1

仅供参考: 别名-Int32和int之间有一个区别,例如:

您可以编写:

enum A : int
{
}

但你不能写成:

enum A : Int32
{
}

0
据我所知,它们没有区别。至少在结果上没有区别。
您可以像这样使用它:
string mystring = "blah";
mystring = string.Empty;
或者
String mystring = "blah";
mystring = String.Empty;

能否解释一下你的负评? - anon271334

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接