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

标签 c# arrays

案例一:

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/

相关文章:

c# - 在代码隐藏中绑定(bind)动态创建的控件

c# - 在线程内使用全局字典

具有动态值的 PHP 数组,其中包含稍后从 mysql 表构建选项值的项目列表

c# - 使用表达式将查询抽象到 Azure 表存储

c# - HttpClient 连接状态在使用一段时间后保持在 TIME_WAIT 导致套接字异常

c# - 如何配置 AutoMapper 区分大小写?

javascript - 如何从与每个数组有关系的对象数组中删除对象?

arrays - 列表和数组有什么区别?

javascript - 附加除指定变量之外的整个数组

c# - 用C#编写一个递减数组