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

Pra*_*aib 6 .net c# string

可能重复:
String.Empty和""之间有什么区别

我应该使用以下哪一项来分配空字符串,为什么?

string variableName = "";
Run Code Online (Sandbox Code Playgroud)

要么

string variableName = string.Empty;
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 6

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

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


顺便说一下,我正在使用"".它简短,清晰,易读.

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


更新:似乎并非如此简单.单个应用程序域中可能存在许多实习字符串实例.而且行为取决于框架版本.有关更多信息,请参阅Eric Lippert的String interning和String.Empty以及String.Intern方法的Reference中的备注.

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


Ode*_*ded 6

String.Empty 是通常建议的.

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

此外,""创建一个字符串对象(此对象将会在应用程序中重用,因为在.NET字符串实习),String.Empty不创建一个新的对象.看到这里.


Pra*_*ana 5

使用String.Empty而不是""是很好的.

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

myString = String.Empty does not. 
Run Code Online (Sandbox Code Playgroud)

编辑

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

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

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

String.Empty与""(双引号)之间的区别

String.Empty vs""vs String.IsNullOrEmpty

  • myString =""不会创建新实例.http://stackoverflow.com/questions/263191/in-c-should-i-use-string-empty-or-string-empty-or (6认同)
  • @this .__ curious_geek因为没有人真正阅读链接页面.在您的回答中断言,链接页面确认您所写的内容就足够了.;-) (2认同)
  • -1.这确实是错的. (2认同)