C# 字符串。空对“&引用;
可能重复:C# 字符串。空对“&引用;,c#,C#,可能重复: String.Empty与有何不同?没有什么不同 : 此字段的值是长度为零的字符串“” 在应用程序代码中,此字段最常用于将字符串变量初始化为空字符串的赋值。要测试字符串的值是否为string.Empty,请使用IsNullOrEmpty方法 没有区别。有些人更喜欢使用String.Empty来实现代码可读性。使用您熟悉的对象。字符串。空的对象始终是同一个对象 “始终是一个新对象,垃圾收集器可能必须删除它 因此,应始终使用string.empty而不是“.” string a="";
String.Empty
与有何不同?没有什么不同
:
此字段的值是长度为零的字符串“”
在应用程序代码中,此字段最常用于将字符串变量初始化为空字符串的赋值。要测试字符串的值是否为string.Empty,请使用IsNullOrEmpty方法
没有区别。有些人更喜欢使用String.Empty
来实现代码可读性。使用您熟悉的对象。字符串。空的对象始终是同一个对象
“始终是一个新对象,垃圾收集器可能必须删除它
因此,应始终使用string.empty而不是“.”
string a="";
string b=string.Empty;
翻译成
IL_0000: ldstr ""
IL_0005: ldsfld System.String.Empty
大多数情况下,String.Empty与“
完全相同,但是通常我发现它更易于使用String.IsNullOrEmpty(str)
,而不必比较str==”| | str==null
,如果您使用的是.NET 4.0String.IsNullOrWhiteSpace(str)
则涵盖更多的情况,而且是目前为止最好的。根据:
正如大卫所暗示的那样,两者之间存在差异
在String.Empty和“”之间是很好的
虽小,但有区别。“”
实际上,它会创建一个对象
很可能是从绳子上拔出来的
实习生池,但仍然…虽然
String.Empty不会创建任何对象…所以如果
你真的在寻找最终的答案
我建议提高内存效率
String.Empty。然而,你应该
请记住,区别是如此巨大
琐碎的你永远也看不到
你的代码
至于System.String.Empty或
字符串。空或字符串。空…我的关心
级别较低;-)
更新(2015年6月3日):
评论中提到,上述引用自2003年的内容不再正确(我假设这是指“
实际创建了一个对象的语句)。因此,我刚刚在C#5(VS 2013)中创建了几个简单的控制台程序:
这表明当代码开始运行时,”
和String.Empty
都是内部的,这意味着在所有实际应用中它们是相同的
布拉德评论中最重要的部分是:
你应该记住,区别是如此的琐碎,你会
就像从未在你的代码中看到它一样
这是底线。在“”和String.Empty之间进行选择不是基于性能的决定。根据您认为更具可读性的内容或项目中已经使用的惯例进行选择。如果在reflector中打开它,您将看到它们是相同的重复:与流行相关的问题不是每次都创建新对象。编译器将把它们全部“链接”到一个空字符串。我在某个地方(对不起,我不记得在哪里)读到空字符串在每个程序集中重复一次。因此,每个使用“
而不是System.String.Empty
的程序集都在浪费宝贵的内存!;-)你的意思是“不使用String.Empty的主要原因是可读性”吗?正如复制品所说,它在.NET2和更高版本中没有区别。在.NET1时代,它是不同的。所以,您将在仍在使用的旧代码中看到String.Empty,它是由经历了.NET1时代的老学究们本能地输入的。善良;它留下了一个标记。你没有抓住要点:String.IsNullOrEmpty(str)
与String.Empty
没有任何关系,只是单词Empty出现在两个地方。str==“”| | str==null
在我看来非常无效,因为左侧是先计算的。另一个使用IsNullOrEmpty
方法的原因是:-)在我看来,String.Empty不容易阅读。我不喜欢它。我总是用“”。我们对非空字符串文字使用双引号,因此为了保持一致,我们也应该对字符串文字使用双引号。键入两个引号比string.empty快得多。两个引号是跨平台的。这很简单。我发现“
比string.Empty
更容易阅读和理解。在快速原型化代码的过程中,我遇到过很多案例,我到处乱扔”
,这后来引入了很多bug,因为意图不明确:“我是想说:在这里故意传递空字符串”还是“我忘了在这里传递一个非空字符串了吗”。@GeorgeChakhidze您不需要字符串。空的,因为您也可以在创建原型时为空字符串引入一个字母常量
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);
}
}