.net 空字符串应该使用哪一个,为什么?[duplicate]

6fe3ivhb  于 2022-12-14  发布在  .NET
关注(0)|答案(8)|浏览(130)

此问题在此处已有答案

12年前就关闭了。

可能重复:

What is the difference between String.Empty and “”
我应该用下面哪一个来赋值空字符串?为什么?

string variableName = "";

string variableName = string.Empty;
jhkqcmku

jhkqcmku1#

String.Empty是通常推荐的。
为什么?因为它传达了意义,你非常明确地说你希望字符串为空。
另外,""创建一个字符串对象(该对象将在应用程序中重用,因为.NET中的字符串是interned),String.Empty不创建新对象。

z8dt9xmd

z8dt9xmd2#

使用你的项目或团队风格指导方针所说的任何东西。如果你没有,就聊一会儿,选择一个并始终如一地使用它。
从技术上讲,两者是完全相同的,并且指向相同的代码。String.Empty表示被临时存储的空字符串(“”)的示例。由于所有代码中的字符串常量都是自动临时存储的,因此“”表示完全相同的空字符串示例(更新:在组件内,参见以下更新)。
顺便说一下,我用的是“"。它简短,清晰,可读性强。
String.Empty在使用反射等的泛型代码中很有用。当你不关心你有什么类,只想得到空值时,比如用默认值初始化。
更新:看起来事情没那么简单。在一个应用程序域中可能有许多 interned string的示例。并且行为取决于框架版本。更多信息请参见Eric Lippert's String interning and String.EmptyReference for String.Intern method中的备注。
但是第二个链接表明,自从3.5 SP1以来,又有了一个单独的interned“",因为它应该摆在首位。所以,当你编程的时候,为什么要为它费心呢?项目需要一些时间来完成。编译器,框架和工具的改进因素......不要过早地优化。可读性,一致性和正确性更重要。

0lvr5msh

0lvr5msh3#

最好使用String.Empty而不是“"。

myString = “” creates a new instance of type String.

myString = String.Empty does not.

编辑

误解是使用一个空的带引号的字符串总是示例化一个新的对象。为什么我要这样说呢?注意.NET是在它的字符串中进行实习的,所以将来的示例会从实习池中取出相同的不可变字符串,任何性能损失都可以忽略不计。在计算机科学中,字符串实习是一种只存储每个不同字符串值的一个副本的方法。它必须是不可变的。插入字符串使得一些字符串处理任务花费更多的时间或空间,而代价是在创建或插入字符串时需要更多的时间。非重复值存储在字符串插入池中。
每个字符串的单个副本被称为“intern”,通常由string类的方法查找。如果“”创建了一个对象,而String.Empty没有,这意味着什么是确定的。但是如果代码中有另一个“”,这个对象将被创建一次,并将在以后从字符串池中引用。
字符串暂存在运行应用程序时保留一个字符串哈希表。如果创建了一个具有相同内容的字符串,则不会发生新的堆分配,而是返回一个对现有(相同)字符串的引用。请记住,每个字符串文字不一定会导致一个新的字符串示例。
Difference between String.Empty and "" (doublequotes)
String.Empty vs “” vs String. IsNullOrEmpty

carvr3hs

carvr3hs4#

没关系,与MSDN article中描述的没有任何区别。

字符串。空字段

此字段的值为零长度字符串“"。

ukdjmx9f

ukdjmx9f5#

here中有一篇很好的文章解释了""string.Empty之间的区别。
摘自文章:
“在这里,我们深入研究了string.Empty,首先了解了如何在程序中使用它,然后回顾了它在开关中不起作用的原因。此外,我们发现它向C#编译器提供的有关代码的信息比常量本身少。最后,我们看到C#编译器可以完全消除使用“"的某些指令,但不能消除使用string.Empty的指令。”

qc6wkl3g

qc6wkl3g6#

从我所读到的内容来看,两者在行为上没有区别,在效率上也几乎没有区别(string.empty有一点优势),所以你选择哪一个并不重要,实际上没有什么区别。

tct7dpnv

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

y3bcpkx1

y3bcpkx18#

" """看起来很相似。如果你不能在" "中错误地捕捉到一个空格
那么" "可能超过String.IsNullOrEmpty(),并产生意想不到的结果。

相关问题