案例一:
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[][]
?
最佳答案
int[][]
是一个数组数组。如果您将其显式键入为 int[][]
那么它就可以工作(如您所见),但如果您使用隐式键入,则代码会以不同的方式运行。
语法 new []
表示“我正在创建一个数组,但我希望你计算出类型。考虑以下工作示例:
new [] { new int [] { }, new [] { 1, 42 } }
这里我们说我们想要一个新的隐式类型数组。编译器然后查看我们的初始化程序以计算出该数组的类型。在本例中,它看到两项:第一项是 int[]
类型的显式类型空数组,第二项是隐式类型数组。当编译器检查第二项的内容时,它发现它是一个 int[]
,因此确定整个表达式定义了一个 int[][]
。
在上面的示例中,我们需要显式键入第一个空数组,否则编译器将不知道其类型,因为它没有可用于确定类型的项。
感谢 William Andrew Montgomery 为我提供了获得此答案的第一个提示。
关于c# - 为什么我们不能只使用 [][] 而不是 int[][]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109315/