Imi*_*Imi 7 c# jagged-arrays multidimensional-array
我刚才有一个"什么......"的时刻.以下是否有意,C#中的数组"非自然"声明背后是否存在一些模糊的推理?
int[,][] i; // declares an 2D - array where each element is an int[] !
// you have to use it like this:
i = new int[2,3][];
i[1,2] = new int[0];
Run Code Online (Sandbox Code Playgroud)
我本来期待相反的方式.int [,] []声明一维数组,其中每个元素都是二维数组.
有趣的是,类型的名称是相反的:
Console.WriteLine(typeof(int[,][]).Name); // prints "Int32[][,]"
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?这是故意的吗?(在Windows下使用.NET 4.5.)
您可以在Eric Lipperts博客Arrays of arrays中找到一个冗长的讨论.
C#实际上做了什么
一团糟.无论我们选择哪种选项,最终都不符合我们的直觉.这是我们在C#中实际选择的内容.
首先关闭:选项二[它是一个二维数组,每个元素是一维的一维数组]是正确的.我们强迫你忍受Consequence One所带来的怪异; 您实际上并没有通过附加数组说明符将元素类型转换为该类型的数组.通过将说明符前置到现有数组说明符列表中,可以使其成为数组类型.疯狂但真实.
'prepending'这个词部分解释了反转类型名称的输出.CLR类型名称不一定与C#声明相同.
但更相关的报价在底部:
总而言之,多维乱七八糟的数组几乎肯定是一个糟糕的代码味道.