在。net中,String和。net之间的区别是什么?空和"",他们是可交换的,或者有一些潜在的引用或本地化问题,围绕相等的字符串。空将保证都不是问题?
当前回答
当您在视觉上扫描代码时,""会像字符串一样呈现彩色。字符串。Empty看起来像常规的类成员访问。在快速浏览的过程中,更容易发现“”或凭直觉理解其含义。
找出字符串(堆栈溢出着色不是很有帮助,但在VS中这是更明显的):
var i = 30;
var f = Math.Pi;
var s = "";
var d = 22.2m;
var t = "I am some text";
var e = string.Empty;
其他回答
string mystring = "";
ldstr ""
LDSTR将一个新的对象引用推入存储在元数据中的字符串字面值。
string mystring = String.Empty;
ldsfld string [mscorlib]System.String::Empty
LDSFLD将静态字段的值推入计算堆栈
我倾向于使用String。用空代替"",因为在我看来,这样更清晰,也不那么vb。
前面的答案对于。net 1.1是正确的(查看他们链接的帖子的日期:2003年)。至于. net 2.0和以后的版本,基本上没有区别。无论如何,JIT最终都会引用堆上相同的对象。
根据c#规范,第2.4.4.5节: http://msdn.microsoft.com/en-us/library/aa691090 (VS.71) . aspx
每个字符串字面值不一定会产生一个新的字符串实例。当两个或多个根据字符串相等运算符(第7.9.7节)等效的字符串字面值出现在同一个程序集中时,这些字符串字面值引用同一个字符串实例。
有人甚至在布拉德·亚伯拉姆的帖子评论中提到了这一点
总之,"" vs. String的实际结果。Empty是nil。JIT最终会弄清楚的。
就我个人而言,我发现JIT比我聪明得多,所以我尽量在微编译器优化方面不太聪明。JIT将展开for()循环,删除冗余代码,内联方法等,在比我或c#编译器之前预期的更好和更合适的时间。让JIT来做它的工作吧:)
这都不重要!
以前的一些讨论:
http://www.codinghorror.com/blog/archives/000185.html
http://blogs.msdn.com/brada/archive/2003/04/22/49997.aspx
http://blogs.msdn.com/brada/archive/2003/04/27/50014.aspx
从实体框架的角度来看:EF版本6.1.3似乎处理字符串。在验证时,Empty和""不同。
字符串。出于验证目的,Empty被视为空值,如果在Required(带属性)字段上使用,则会抛出验证错误;其中as ""将通过验证而不抛出错误。
这个问题可以在EF 7+中解决。参考: - https://github.com/aspnet/EntityFramework/issues/2610)。
编辑:[Required(AllowEmptyStrings = true)]将解决此问题,允许字符串。为空进行验证。
字符串。Empty是只读字段,而""是const字段。这意味着您不能使用String。在switch语句中为空,因为它不是常量。
推荐文章
- 如何在Typescript中解析JSON字符串
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- 用javascript检查输入字符串中是否包含数字
- 按类型查找WPF窗口中的所有控件
- 数组与列表的性能
- Java:检查enum是否包含给定的字符串?
- 从Description属性中获取Enum
- 用PHP删除字符串的前4个字符
- 如何从字符串的开始或结束删除所有空白?
- 为什么使用try {} finally{}和一个空的try块?
- 字符串到JS中的对象
- 为什么Python的原始字符串不能以一个反斜杠结尾?
- 如何在内存中获取对象大小?
- 每个优秀的。net开发人员都应该能够回答的问题?