关于c#:我应该使用哪个空字符串,为什么?

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

为什么?因为它传达了意义,所以您非常明确地表示希望字符串为空。

另外,""创建了一个字符串对象(这个对象将在应用程序中重用,因为.NET中的字符串是Internet的),String.Empty不创建新的对象。请看这里。


使用您的项目或团队风格指导方针所说的任何内容。如果你没有,只需聊一会儿,选择一个并持续使用。

从技术上讲,两者都是相同的,导致相同的代码。string.empty表示内部空字符串(")的实例。而且,由于所有的代码字符串常量都被自动插入,"表示完全相同的空字符串实例(更新:在程序集中,请参见下面的更新)。

顺便说一下,我在用。它简短、清晰、可读。

空字符串在使用反射等的通用代码中很有用。当您不关心您拥有的类时,只想获取空值,例如使用默认值初始化。

更新:看起来不是那么简单。在单个应用程序域中,可能有许多实习字符串实例。这种行为取决于框架版本。有关详细信息,请参阅Eric Lippert的string interning和string.empty,以及string.intern方法的参考注释。

但第二个链接表明,自从3.5sp1以来,又有一个单独的实习生",因为它应该在第一位。那么,当你编程的时候,为什么还要费心呢?完成项目需要一些时间。提高编译器、框架和工具的因素…不要过早优化。更重要的是要可读、一致和正确。


使用string.empty而不是"。

1
2
3
myString ="" creates a new instance of type String.

myString = String.Empty does not.

编辑

错误的观念是,使用空的带引号的字符串总是实例化一个新对象。我为什么这么说?请注意,.NET会实习生它的字符串,因此将来的实例会从实习生池中拉出相同的不可变字符串,任何性能影响都可以忽略不计。在计算机科学中,字符串interning是一种只存储每个不同字符串值的一个副本的方法,必须是不可变的。在创建或实习字符串时,实习字符串会使一些字符串处理任务花费更多的时间或空间,但代价是需要更多的时间。不同的值存储在一个字符串实习生池中。

每个字符串的单个副本称为"intern",通常由string类的方法查找。如果""创建了一个对象而String.Empty不创建,这意味着可以。但是,这个对象将被创建一次,如果代码中有其他对象,稍后将从字符串池引用它。

字符串实习生在运行应用程序时保留字符串的哈希表。如果创建具有相同内容的字符串,则不会发生新的堆分配,而是返回对现有(相同)字符串的引用。请记住,每个字符串文字不一定会产生新的字符串实例。

string.empty和"(doublequeotes)之间的差异

字符串。空vs""vs字符串。无空白的


这里可以找到一篇很好的文章来解释""String.Empty之间的区别。

从文章中:

"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,"".


从我读到的内容来看,行为上没有区别,而且两者之间的效率差别非常非常非常小(非常小的边缘变成了字符串。空的)。所以你选择哪一个并不重要,没有实际的区别。


""""看起来相似。如果你不能在""内误占一个空间

那么,""就可以通过String.IsNullOrEmpty()。做出意想不到的结果。


最好使用string.Empty而不是"。

string.Empty比"更易读。

最好使用string variableName = string.Empty;而不是string variableName ="";

注:""3.0及以上版本没有对象创建,"和string.empty相同。

但是在.NET 2.0中,""将创建一个新实例,而不是string.Empty的实例。

在C中,我应该使用string.empty或string.empty还是"初始化字符串"?

网址:http://www.ecma-international.org/publications/standards/ecma-334.htm