int[] data1 = new int [] { 1, 2, 3 };
可以简化为
int[] data2 = new [] { 1, 2, 3 };
int[][] table1 = new int[][] { new int[] { }, new int[] { 1, 2 } };
不能简化为
int[][] table2 = new [][] { new int[] { }, new int[] { 1, 2 } };
对于第二种情况,为什么我们不能只使用[][]
代替int[][]
?
答案 0 :(得分:10)
int[][]
是一个数组数组。如果您明确地将其键入为int[][]
,那么它可以正常工作(如您所见),但如果您使用隐式类型,则代码将以不同方式运行。
语法new []
说“我正在创建一个数组,但我想让你计算出这个类型。请考虑以下工作示例:
new [] { new int [] { }, new [] { 1, 42 } }
这里我们说我们想要一个新的隐式类型数组。然后编译器查看我们的初始化器以计算出该数组的类型。在这种情况下,它会看到两个项目:第一个是类型为int[]
的显式类型空数组,第二个是隐式类型数组。当编译器检查第二个项目的内容时,它会发现它是int[]
,因此确定整个表达式定义了int[][]
。
在上面的例子中,我们需要显式地键入第一个空数组,因为否则编译器不知道它的类型,因为它没有用于确定类型的项。
感谢William Andrew Montgomery为我提供了第一个得到答案的提示。