之所以存在差异,是因为 Microsoft 的人员决定在以下情况下简化语法:宣告and初始化数组在同一语句中,但没有添加所需的语法以允许您稍后为其分配新数组。
这就是为什么它有效:
int[] a = { 1, 2, 3, 4, 5 };
但这并没有:
int[] a;
a = { 1, 2, 3, 4, 5 };
他们可以添加语法来允许这样做吗?当然可以,但他们没有。他们很可能认为这个用例很少被使用,因此没有必要优先考虑其他功能。所有新功能均以负 100 分开始 http://blogs.msdn.com/b/ericgu/archive/2004/01/12/57985.aspx这可能只是在优先级列表上排名不够高。
注意{ 1, 2, 3, 4, 5 }
其本身没有任何意义;它只能出现在两个地方:
-
作为数组变量声明的一部分:
int[] a = { 1, 2, 3, 4, 5 };
-
作为数组创建表达式的一部分:
new int[] { 1, 2, 3, 4, 5 }
号码5
另一方面,它在 C# 中出现的任何地方都有其含义,这就是为什么它有效:
int a;
a = 5;
所以这只是 C# 设计者决定支持的特殊语法,仅此而已。
此语法记录在 C# 规范的部分12.6 数组初始值设定项 https://msdn.microsoft.com/en-us/library/aa664573(v=vs.71).aspx.