我可以用整数做到这一点:
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 }它本身没有任何意义,它只能出现在两个地方:
作为数组变量声明的一部分:
int[] a = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)作为数组创建表达式的一部分:
new int[] { 1, 2, 3, 4, 5 }
Run Code Online (Sandbox Code Playgroud)5另一方面,这个数字在C#中的每个地方都有意义,这就是为什么这样做的原因:
int a;
a = 5;
Run Code Online (Sandbox Code Playgroud)
所以这只是C#的设计者决定支持的特殊语法,仅此而已.
C#规范,第12.6节" 阵列初始化器"一节中介绍了此语法.