我应该使用哪个空字符串?为什么?

时间:2010-07-07 06:09:23

标签: c# .net string

  

可能重复:
  What is the difference between String.Empty and “”

我应该使用以下哪个来分配空字符串以及为什么?

string variableName = "";

string variableName = string.Empty;

8 个答案:

答案 0 :(得分:6)

使用您的项目或团队风格指南所说的任何内容。如果你没有,只需聊聊一下,选择一个并一直使用它。

从技术上讲,两者都是相同的,并导致相同的代码。 String.Empty表示实习空字符串(“”)的实例。由于所有代码内字符串常量都是自动实现的,“”表示空字符串的完全相同的实例(更新:在程序集中,请参阅下面的更新)。


顺便说一下,我正在使用“”。它简短,清晰,易读。

String.Empty在使用反射等的通用代码中很有用。当你不关心你拥有什么类时,只想得到例如空值。使用默认值进行初始化。


更新:看起来并非那么简单。单个应用程序域中可能存在许多 interned 字符串的实例。而且行为取决于框架版本。有关详细信息,请参阅Eric Lippert's String interning and String.Empty中的Reference for String.Intern method和备注。

但第二个链接表明,自3.5 SP1以来,还有单个实习“”,因为它应该是第一位的。那么,为什么在编程时会烦恼呢?项目需要一些时间才能完成。考虑改进编译器,框架和工具......并且不要过早优化。可读性,一致性和正确性更为重要。

答案 1 :(得分:6)

String.Empty是通常建议的。

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

此外,""创建一个字符串对象(此对象将在应用程序中重复使用,因为.NET中的字符串为interned),String.Empty不会创建新对象。请参阅here

答案 2 :(得分:5)

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

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

myString = String.Empty does not. 

修改

误解是使用空引用的字符串总是实例化一个新对象。为什么我这样说呢?请注意,.NET会对其字符串进行实例化,因此将来的实例将从实习池中提取相同的不可变字符串,并且任何性能损失都可以忽略不计。在计算机科学中,字符串实习是一种只存储每个不同字符串值的一个副本的方法,该字符串值必须是不可变的。实习字符串使得一些字符串处理任务需要更多时间或空间效率,代价是在创建或实现字符串时需要更多时间。不同的值存储在字符串实习池中。

每个字符串的单个副本称为“实习生”,通常由字符串类的方法查找。如果“”创建一个对象而String.Empty没有,那么这意味着什么。但是这个对象将被创建一次,如果代码中有另一个“”,将在稍后从字符串池中引用。

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

Difference between String.Empty and "" (doublequotes)

String.Empty vs “” vs String. IsNullOrEmpty

答案 3 :(得分:2)

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

  

String.Empty Field

     

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

答案 4 :(得分:2)

可以找到一篇解释""string.Empty之间差异的好文章here

来自文章:

  

“我们在这里深入研究   string.Empty,首先看看如何使用   它在你的程序中,然后审查   为什么它不适用于交换机。   另外,我们发现了它   向C#提供的信息较少   编译器关于你的代码比   不变的。最后,我们看到了   C#编译器可以完全   消除某些指令   使用“”,但不使用那些   的String.Empty“

答案 5 :(得分:1)

从我读过的内容来看,行为没有区别,两者之间的效率差别很小(非常轻微的边缘变为string.Empty)。所以你选择哪一个并不重要,没有实际的区别。

答案 6 :(得分:0)

最好使用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

答案 7 :(得分:0)

" """看起来很相似。如果你不能错误地在" "内找到一个空格

然后" "可以通过String.IsNullOrEmpty()。并取得意想不到的结果。