可能重复:
String.Empty和“”有什么区别?
String.Empty
和""
有什么不同?
可能重复:
String.Empty和“”有什么区别?
String.Empty
和""
有什么不同?
并没有什么不同。
http://msdn.microsoft.com/en-us/library/system.string.empty.aspx:
该字段的值是零长度的字符串,即 ""。
在应用程序代码中,此字段最常用于将字符串变量初始化为空字符串。要测试一个字符串的值是否为
null
或String.Empty
,请使用IsNullOrEmpty
方法。
IsNullOrEmpty
显然(如其名称所示)不能用于测试字符串的值是否为string.Empty
。 - Mo B.根据Brad Abrams的说法:
正如David所暗示的那样,“String.Empty”和“”之间的差异非常小,但确实存在差异。 “”实际上创建了一个对象,它可能会被提取出字符串内部池,但仍然会创建一个对象...而“String.Empty”不会创建任何对象...因此,如果您真的在寻求最终的内存效率,我建议使用“String.Empty”。但是,请记住,这种差异微不足道,在您的代码中几乎不会看到它。
至于System.String.Empty或string.Empty或String.Empty…我的关注程度很低;-)
更新(6/3/2015):
评论中提到上述2003年的引用已经过时(我假设这是指“”实际上创建了一个对象的声明)。因此,我刚刚在C#5(VS 2013)中创建了一些简单的控制台程序:
class Program
{
static void Main()
{
// Outputs "True"
Debug.WriteLine(string.IsInterned(string.Empty) != null);
}
}
class Program
{
static void Main()
{
// Outputs "True"
Debug.WriteLine(string.IsInterned("") != null);
}
}
这表明当您的代码开始运行时,""
和String.Empty
都被缓存,实际上它们是相同的。
Brad评论中最重要的部分是:
你应该牢记这个微不足道的区别几乎看不见它存在于你的代码中...
这就是核心问题。在选择使用""和String.Empty之间并非基于性能而作出决策。不要浪费太多时间考虑它。根据您发现哪个更易读,或者您项目中已经使用的约定来做出选择。
string.Empty
,我个人发现 ""
更易于阅读和理解。 - David R Tribble""
,这后来导致了许多错误,因为我的意图不清楚:“我是有意要在这里传递空字符串”,还是“我忘记在这里传递非空字符串了”。 - George Chakhidze没有区别。一些人喜欢使用String.Empty
以便提高代码的可读性。使用你自己习惯的即可。
大多数情况下,String.Empty
和 ""
是相同的。不过通常我发现使用 String.IsNullOrEmpty(str)
要比比较 str == "" || str == null
更方便。此外,如果你使用的是 .NET 4.0,String.IsNullOrWhiteSpace(str)
可以覆盖更多的情况,而且是最好的选择。
String.IsNullOrEmpty(str)
和string.Empty
没有任何关系,除了两者都含有单词"empty"之外。请注意,这不是解释。 - Heinz Kesslerstr == "" || str == null
看起来相当低效,因为左边先被评估。这是使用 IsNullOrEmpty
方法的另一个原因 :-) - TTonistring.Empty始终是相同的对象。
""始终是一个新对象,可能需要由垃圾回收器删除。
因此,您应该始终使用string.empty而不是""。
string a="";
string b=string.Empty;
被翻译为
IL_0000: ldstr ""
IL_0005: ldsfld System.String.Empty
""
而不是 System.String.Empty
的程序集都浪费了宝贵的内存!;-) - mcrumley