为什么我不能在没有初始化器的情况下声明隐式类型的数组?

els*_*awe 8 c# arrays

为什么我必须写int之后new,当我声明数组num没有初始化?例如

int[] num = new int[5];
Run Code Online (Sandbox Code Playgroud)

对于另一个数组,num1,我只是宣布它,然后再赋予它的值,我没有键入intnew,像我一样的阵列num.

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

为什么这个快捷方式对我的第一个例子不起作用?

Ser*_*rvy 9

如果提供数组的值,则可以推断出数组的类型(在某些情况下,您的示例已满足).由于值都是整数,因此编译器能够推断出您需要一个整数数组.如果您没有提供任何值(或者如果值不能全部隐式转换为其中一个值的类型),则无法推断出数组的类型应该是什么,因此您需要指定明确地说.


Blo*_*ard 8

使用值声明数组的"完整"语法是new int[] {1, 2, 3, 4};.

你的new [] {1, 2, 3, 4};行是一种简写语法.它是一个"隐式类型"数组.因为值都是int,所以数组会自动声明为int[].

您无法编写的原因int[] x = new [5];很简单,C#设计人员尚未实现此功能.