为什么存在字符串的小写和大写版本,我应该使用哪个?

Ben*_*ter 82 c#

好吧,这可能是一个愚蠢的问题,但我无法找到任何相关信息.

String.Empty和string.Empty是一样的吗?我总是发现自己倾向于使用大写版本(String.Empty),因为我更喜欢我的IDE中的颜色和外观而不是小写版本(string.Empty)...

是否有一种"正确"的方式来使用这些不同或完全取决于个人偏好?这是我的假设,他们都是一样的,但说实话,我从来没有想过任何想法,直到今天无论出于什么原因我都想知道"如果它们都存在,它们必须都存在是有原因的".

是否有一个原因,任何人都知道?如果是这样,它是什么?任何人都可以开导我吗?

PS"完全重复"只回答问题的一半 - "哪个是对的?",而不是"为什么它们都存在?"


确切重复:C#中String和string之间有什么区别?

完全重复:C#中的字符串与字符串

Kon*_*lph 54

在C#中,小写类型名称是类型名称的别名System.xxx,例如stringequals System.Stringintequals System.Int32.

为了保持一致性,最好将这些语言别名用于类型名称而不是它们的框架等效项.所以你做错了.;-)

至于它们都存在的原因,存在.NET类型,因为它们是在一个名为CTS(通用类型系统)的.NET库的独立于语言的标准中定义的.为什么C#定义这些别名超出了我(VB做了类似的事情).我想这两个原因是

  1. 习惯.通过为某些基本类型提供相同的类型名称,让所有这些C和Java程序员使用C#.
  2. 懒惰:您不必导入System命名空间即可使用它们.

编辑因为很多人似乎更喜欢其他符号,所以让我指出这绝不是不合理的.实际上可以使用CTS类型名称而不是C#的关键字,并且在其他答案中提供了一些表面上很好的参数.从纯度/风格的角度来看,我可能会同意.

但是,请考虑是否值得打破一个有助于统一项目代码的完善惯例.

  • 我倾向于在声明类型时使用别名,并在调用静态成员时使用实际名称.所以int foo,String.Empty和Int32.Parse对我来说. (5认同)
  • 不,他“倾向于使用大写版本(String.Empty)”,因此根据你的说法做错了...... (2认同)
  • 另外,我宁愿不输入 Int32 而不是 int。 (2认同)
  • 微软也建议编程习惯使用别名类型的数据类型。 (2认同)

Ed *_* S. 15

它在概念上类似于这样的东西:

using int=System.Int32
Run Code Online (Sandbox Code Playgroud)


Fre*_*els 6

string被映射到String类AFAIK,因此它们是相同的.

对于例如int和Int32也是如此.


Arj*_*nbu 5

他们都是一样的。

就我个人而言,我更喜欢使用小写字符串“blue one”,使用 C# 关键字而不是 .NET 类名,这与我使用 int 而不是 Int32 的原因相同。另外,小写的不需要包含系统命名空间......


Sha*_*ese 5

就我个人而言,我更喜欢使用 String,因为 String 和 Object 都是引用,而所有其他基本类型都是值类型。在我看来,这是最清晰的分离。