为什么我们不能只使用[] []而不是int [] []?

时间:2014-06-08 18:16:44

标签: c# arrays

案例1:

int[] data1 = new int [] { 1, 2, 3 };

可以简化为

int[] data2 = new [] { 1, 2, 3 };

案例2:

int[][] table1 = new int[][] { new int[] { },  new int[] { 1, 2 } };

不能简化为

int[][] table2 = new [][] { new int[] { }, new int[] { 1, 2 } };

问题:

对于第二种情况,为什么我们不能只使用[][]代替int[][]

1 个答案:

答案 0 :(得分:10)

int[][]是一个数组数组。如果您明确地将其键入为int[][],那么它可以正常工作(如您所见),但如果您使用隐式类型,则代码将以不同方式运行。

语法new []说“我正在创建一个数组,但我想让你计算出这个类型。请考虑以下工作示例:

new [] { new int [] { }, new [] { 1, 42 } }

这里我们说我们想要一个新的隐式类型数组。然后编译器查看我们的初始化器以计算出该数组的类型。在这种情况下,它会看到两个项目:第一个是类型为int[]的显式类型空数组,第二个是隐式类型数组。当编译器检查第二个项目的内容时,它会发现它是int[],因此确定整个表达式定义了int[][]

在上面的例子中,我们需要显式地键入第一个空数组,因为否则编译器不知道它的类型,因为它没有用于确定类型的项。

感谢William Andrew Montgomery为我提供了第一个得到答案的提示。