为什么字符串和对象的别名是小写的?

Why are the aliases for string and object in lowercase?

这是 C# 中的别名列表(What is the difference between String and string in C#? 的赞美):

object:  System.Object
string:  System.String
bool:    System.Boolean
byte:    System.Byte
sbyte:   System.SByte
short:   System.Int16
ushort:  System.UInt16
int:     System.Int32
uint:    System.UInt32
long:    System.Int64
ulong:   System.UInt64
float:   System.Single
double:  System.Double
decimal: System.Decimal
char:    System.Char

我可以看到 bool 通过 char 是小写别名,因为它们是原始类型。

为什么对象和字符串不大写,因为它们是复杂类型?这是开发人员的疏忽,还是有必要将它们小写?或者这是一个自以为是的问题?

你最终得到的是 string.Format() 而不是 String.Format(),这看起来很时髦,让我觉得 string 是一个变量。

因为所有keywords(保留标识符)都是小写的。

在C#中,没有"primitive types"和"complex types"。其中有 classes and structs、(分别是引用类型和值类型)。两者都可以包含方法(例如 char.IsDigit('a'))。所以你的反对意见并不是真的有效。但是还有一个问题:为什么?

我不确定这是否有好的来源,但我认为小写别名是为了匹配 other C# keywords,它们本身以 C/C++ 关键字为模型。

答案很简单。如果你想像 class 一样使用它,请使用 String,如果你想像关键字一样使用它,请使用 string。开发人员想让我们感觉我们正在使用原始类型。因为在 C# 中没有什么是原始的。

关于您最后的评论:

You end up with things like string.Format() instead of String.Format(), which just look funky and make me think string is a variable.

对于 C# 6,这成为一个有实际意义的问题,您可以这样做:

using static System.String;

...
var x = Format(...);

或者更进一步,您可以完全取消 string.Format 并改用 $