Which should I use for empty string and why?
Possible Duplicate:
What is the difference between String.Empty and “”
我应该使用以下哪项来分配空字符串,为什么?
1 | string variableName =""; |
或
1 | string variableName = string.Empty; |
通常推荐使用
为什么?因为它传达了意义,所以您非常明确地表示希望字符串为空。
另外,
使用您的项目或团队风格指导方针所说的任何内容。如果你没有,只需聊一会儿,选择一个并持续使用。
从技术上讲,两者都是相同的,导致相同的代码。string.empty表示内部空字符串(")的实例。而且,由于所有的代码字符串常量都被自动插入,"表示完全相同的空字符串实例(更新:在程序集中,请参见下面的更新)。
顺便说一下,我在用。它简短、清晰、可读。
空字符串在使用反射等的通用代码中很有用。当您不关心您拥有的类时,只想获取空值,例如使用默认值初始化。
更新:看起来不是那么简单。在单个应用程序域中,可能有许多实习字符串实例。这种行为取决于框架版本。有关详细信息,请参阅Eric Lippert的string interning和string.empty,以及string.intern方法的参考注释。
但第二个链接表明,自从3.5sp1以来,又有一个单独的实习生",因为它应该在第一位。那么,当你编程的时候,为什么还要费心呢?完成项目需要一些时间。提高编译器、框架和工具的因素…不要过早优化。更重要的是要可读、一致和正确。
使用string.empty而不是"。
1 2 3 |
编辑
错误的观念是,使用空的带引号的字符串总是实例化一个新对象。我为什么这么说?请注意,.NET会实习生它的字符串,因此将来的实例会从实习生池中拉出相同的不可变字符串,任何性能影响都可以忽略不计。在计算机科学中,字符串interning是一种只存储每个不同字符串值的一个副本的方法,必须是不可变的。在创建或实习字符串时,实习字符串会使一些字符串处理任务花费更多的时间或空间,但代价是需要更多的时间。不同的值存储在一个字符串实习生池中。
每个字符串的单个副本称为"intern",通常由string类的方法查找。如果""创建了一个对象而
字符串实习生在运行应用程序时保留字符串的哈希表。如果创建具有相同内容的字符串,则不会发生新的堆分配,而是返回对现有(相同)字符串的引用。请记住,每个字符串文字不一定会产生新的字符串实例。
string.empty和"(doublequeotes)之间的差异
字符串。空vs""vs字符串。无空白的
这里可以找到一篇很好的文章来解释
从文章中:
"Here we looked in depth at
string.Empty, first seeing how to use
it in your program and then reviewing
why it won't work in switches.
Additionally, we found that it
provides less information to the C#
compiler about your code than the
constant itself. Finally, we saw that
the C# compiler can completely
eliminate certain instructions that
use"", but not those that use
string.Empty"
没关系,这和msdn文章中描述的没有任何区别。
String.Empty Field
The value of this field is the
zero-length string,"".
从我读到的内容来看,行为上没有区别,而且两者之间的效率差别非常非常非常小(非常小的边缘变成了字符串。空的)。所以你选择哪一个并不重要,没有实际的区别。
那么,
最好使用
最好使用
注:
但是在.NET 2.0中,
在C中,我应该使用string.empty或string.empty还是"初始化字符串"?
网址:http://www.ecma-international.org/publications/standards/ecma-334.htm