为什么我不能使用与数组声明分开的数组初始化语法?

wic*_*kyd 13 c# arrays

我可以用整数做到这一点:

int a;
a = 5;
Run Code Online (Sandbox Code Playgroud)

但我不能用整数数组做到这一点:

int[] a;
a = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

为什么不?

为了澄清,我不是在寻找正确的语法.我可以抬头看.我知道这有效:

int[] a = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

这将相当于:

int a = 5;
Run Code Online (Sandbox Code Playgroud)

我想要了解的是,为什么代码的代码失败?代码未能被识别为有效的原因是什么.

ang*_*son 16

之所以存在差异,是因为微软公司决定在同一语句中声明初始化数组时减轻语法,但是没有添加必要的语法以允许您稍后为其分配新数组.

这就是为什么这有效:

int[] a = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

但这不是:

int[] a;
a = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

他们可以添加语法来允许这个吗?当然,但他们没有.很可能他们觉得这个用例很少使用,因此不保证优先于其他功能.所有新功能都以负100分开始,这可能只是在优先级列表上排名不够高.

请注意,{ 1, 2, 3, 4, 5 }它本身没有任何意义,它只能出现在两个地方:

5另一方面,这个数字在C#中的每个地方都有意义,这就是为什么这样做的原因:

int a;
a = 5;
Run Code Online (Sandbox Code Playgroud)

所以这只是C#的设计者决定支持的特殊语法,仅此而已.

C#规范,第12.6节" 阵列初始化器"一节中介绍了此语法.