C# return string.Empty; and return String.Empty;

7

9
前两个:没有什么。第三个:不太多。 - Chris Sinclair
3
请参考以下链接:https://dev59.com/XXVC5IYBdhLWcg3w51hv - Qnan
相关问题:https://dev59.com/O3VD5IYBdhLWcg3wWaRh - cadrell0
感谢您提出相关问题! - GibboK
1
@GibboK 未来请在提问前尝试搜索,这些问题并不难找到。 - Servy
谢谢Servy,我会记住你的建议。 - GibboK
2个回答

10

因为stringString的语言别名,所以第一个和第二个表达式之间绝对没有区别。

从.NET 2开始,""返回的对象与String.Empty完全相同,使得所有三个语句在它们返回的值方面成为精确的等价物。即使在.NET 2之前的版本中,由于内部引用会导致不会创建多个对象。

第一个和第二个代码段将生成与第三个代码段不同的IL代码,但它们都将返回相同的对象。


我认为空字符串字面量在 IL 中的结果与使用 String.Empty 不同。虽然不重要,但我认为它在技术上不是“完全相同的对象”或“确切等效”。 - Chris Sinclair
@GibboK,使用其中之一主要是个人口味问题。我猜别名只是为了让事情看起来更熟悉一些,对于C++程序员来说。同样地,intInt32的别名,longInt64的别名,等等。 - Tim Goodman
@ChrisSinclair 那是一个很好的观点 - 我编辑了答案以提到 IL。 - Sergey Kalinichenko
@dasblinkenlight 实际上,进一步阅读后发现,当编译为_release_模式时,编译器将优化它们为相同的汇编代码。 :) 但我想优化实现细节取决于具体的编译器/平台。 - Chris Sinclair
1
@GibboK C# 编译器将您的程序转换为 内部语言(IL)表示形式,即 .NET 虚拟机的二进制代码。这个链接中的答案有详细信息:https://dev59.com/NXVC5IYBdhLWcg3wihqv#1588678。 - Sergey Kalinichenko
显示剩余3条评论

5

归根结底,它们没有区别。

stringSystem.String 的别名(这意味着它们是完全相同的东西),当你输入 "string" 时,编译器会在编译时将其更改为 "System.String"。

现在,System.String.Empty 被定义为:

public static readonly string Empty = "";

所以,这只是明确表达要使用空字符串的一种便捷方式,而不是 "",这可能是打字错误。

2
个人而言,我更喜欢在我的代码中使用常量,例如 Empty,而不是一堆 string s = ""; - JonH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接