此问题在此处已有答案:
12年前就关闭了。
可能重复:
What is the difference between String.Empty and “”
我应该用下面哪一个来赋值空字符串?为什么?
string variableName = "";
或
string variableName = string.Empty;
此问题在此处已有答案:
12年前就关闭了。
可能重复:
What is the difference between String.Empty and “”
我应该用下面哪一个来赋值空字符串?为什么?
string variableName = "";
或
string variableName = string.Empty;
8条答案
按热度按时间jhkqcmku1#
String.Empty
是通常推荐的。为什么?因为它传达了意义,你非常明确地说你希望字符串为空。
另外,
""
创建一个字符串对象(该对象将在应用程序中重用,因为.NET中的字符串是interned),String.Empty
不创建新对象。z8dt9xmd2#
使用你的项目或团队风格指导方针所说的任何东西。如果你没有,就聊一会儿,选择一个并始终如一地使用它。
从技术上讲,两者是完全相同的,并且指向相同的代码。String.Empty表示被临时存储的空字符串(“”)的示例。由于所有代码中的字符串常量都是自动临时存储的,因此“”表示完全相同的空字符串示例(更新:在组件内,参见以下更新)。
顺便说一下,我用的是“"。它简短,清晰,可读性强。
String.Empty在使用反射等的泛型代码中很有用。当你不关心你有什么类,只想得到空值时,比如用默认值初始化。
更新:看起来事情没那么简单。在一个应用程序域中可能有许多 interned string的示例。并且行为取决于框架版本。更多信息请参见Eric Lippert's String interning and String.Empty和Reference for String.Intern method中的备注。
但是第二个链接表明,自从3.5 SP1以来,又有了一个单独的interned“",因为它应该摆在首位。所以,当你编程的时候,为什么要为它费心呢?项目需要一些时间来完成。编译器,框架和工具的改进因素......不要过早地优化。可读性,一致性和正确性更重要。
0lvr5msh3#
最好使用String.Empty而不是“"。
编辑
误解是使用一个空的带引号的字符串总是示例化一个新的对象。为什么我要这样说呢?注意.NET是在它的字符串中进行实习的,所以将来的示例会从实习池中取出相同的不可变字符串,任何性能损失都可以忽略不计。在计算机科学中,字符串实习是一种只存储每个不同字符串值的一个副本的方法。它必须是不可变的。插入字符串使得一些字符串处理任务花费更多的时间或空间,而代价是在创建或插入字符串时需要更多的时间。非重复值存储在字符串插入池中。
每个字符串的单个副本被称为“intern”,通常由string类的方法查找。如果“”创建了一个对象,而
String.Empty
没有,这意味着什么是确定的。但是如果代码中有另一个“”,这个对象将被创建一次,并将在以后从字符串池中引用。字符串暂存在运行应用程序时保留一个字符串哈希表。如果创建了一个具有相同内容的字符串,则不会发生新的堆分配,而是返回一个对现有(相同)字符串的引用。请记住,每个字符串文字不一定会导致一个新的字符串示例。
Difference between String.Empty and "" (doublequotes)
String.Empty vs “” vs String. IsNullOrEmpty
carvr3hs4#
没关系,与MSDN article中描述的没有任何区别。
字符串。空字段
此字段的值为零长度字符串“"。
ukdjmx9f5#
here中有一篇很好的文章解释了
""
和string.Empty
之间的区别。摘自文章:
“在这里,我们深入研究了string.Empty,首先了解了如何在程序中使用它,然后回顾了它在开关中不起作用的原因。此外,我们发现它向C#编译器提供的有关代码的信息比常量本身少。最后,我们看到C#编译器可以完全消除使用“"的某些指令,但不能消除使用string.Empty的指令。”
qc6wkl3g6#
从我所读到的内容来看,两者在行为上没有区别,在效率上也几乎没有区别(string.empty有一点优势),所以你选择哪一个并不重要,实际上没有什么区别。
tct7dpnv7#
最好使用
string.Empty
而不是“"。string.Empty
是比“"更可读的代码。最好使用
string variableName = string.Empty;
,而不是string variableName = "";
注意:
""
.Net 3.0及以上版本没有对象创建,“”和String.Empty相同。但在.Net 2.0中,
""
将创建一个新示例,而不是针对String.Empty
In C#, should I use string.Empty or String.Empty or "" to intitialize a string?
http://www.ecma-international.org/publications/standards/Ecma-334.htm
y3bcpkx18#
" "
和""
看起来很相似。如果你不能在" "
中错误地捕捉到一个空格那么
" "
可能超过String.IsNullOrEmpty()
,并产生意想不到的结果。