可能重复:
String.Empty和""之间有什么区别
我应该使用以下哪一项来分配空字符串,为什么?
string variableName = "";
Run Code Online (Sandbox Code Playgroud)
要么
string variableName = string.Empty;
Run Code Online (Sandbox Code Playgroud)
使用您的项目或团队风格指南所说的任何内容 如果你没有,只需聊聊一下,选择一个并一直使用它.
从技术上讲,两者都是相同的,并导致相同的代码.String.Empty表示实习空字符串("")的实例.由于所有代码内字符串常量都是自动实现的,因此""表示空字符串的完全相同的实例(更新:在程序集内,请参阅下面的更新).
顺便说一下,我正在使用"".它简短,清晰,易读.
String.Empty在使用反射等的通用代码中很有用.当你不关心你拥有什么类时,只想获得空值,例如使用默认值进行初始化.
更新:似乎并非如此简单.单个应用程序域中可能存在许多实习字符串实例.而且行为取决于框架版本.有关更多信息,请参阅Eric Lippert的String interning和String.Empty以及String.Intern方法的Reference中的备注.
但是第二个链接表明,自3.5 SP1以来,还有单个实习"",因为它应该是第一位的.那么,为什么在编程时会烦恼呢?项目需要一些时间才能完成.考虑改进编译器,框架和工具......并且不要过早优化.可读性,一致性和正确性更为重要.
使用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 vs""vs String.IsNullOrEmpty
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |