多一组大括号{}
初始声明中需要:
var waypoints = new int[4][,] {
new int[,] {{6}, {0}},
new int[,] {{1}, {1}},
new int[,] {{1}, {5}},
new int[,] {{6}, {5}}
};
这是因为对于这样的二维数组,数组中的每个元素都被视为用于初始化的数组(尽管它通常用于数组的每个元素,例如val[0,0] = 4;
).
编辑(评论反馈后):
与int[][]
(作为。。而被知道jagged array
,即:数组的数组,其数组成员可以是不同尺寸 https://msdn.microsoft.com/en-us/library/2s05feca.aspx), int[,]
是一个二维数组固定尺寸 https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx。两者都是存储数组的数组,因此数组的每个元素都是一个数组。这解释了为什么需要在其初始化中放置另一个大括号,如上所述。
这样的二维数组,当以不同的方式初始化时,将导致不同的维度(因此有多种初始化方法):
int[,] val = new int[,] { { 6 }, { 0 } }; //resulting in int[2,1]
int[,] val = new int[,] { { 6, 0 } }; //resulting in int[1,2]
无论哪种方式,需要额外的一组大括号.
对于之间的差异jagged array
以及多维、固定大小的数组,there https://stackoverflow.com/questions/597720/what-are-the-differences-between-a-multidimensional-array-and-an-array-of-arrays are already https://stackoverflow.com/questions/12567329/multidimensional-array-vs plenty https://stackoverflow.com/questions/12757570/c-sharp-arrays-string-vs-string?lq=1 good https://stackoverflow.com/questions/468832/why-are-multi-dimensional-arrays-in-net-slower-than-normal-arrays 解释/基准测试 http://www.dotnetperls.com/jagged-2d-array-memory 可用的 https://www.youtube.com/watch?v=3UcJGikWJxs online http://blog.mischel.com/2013/05/08/are-jagged-arrays-faster-than-rectangular-arrays/来自知名来源。我知道,除了OP的兴趣之外,我提供更多有关它的信息并不重要。 (因此,该答案的范围最初仅用于回答失败的初始化)。
据了解,该解决方案不适用于存储坐标点(如 OP 所做的那样)。上面的解释是为了解释为什么他的初始化不起作用,而不是提供存储坐标点的最佳解决方案。至于存储坐标点,Point https://msdn.microsoft.com/en-us/library/system.drawing.point(v=vs.110).aspx in the System.Drawing
struct
会更合适(如评论中所建议的)。
使用二维数组来表示二维中的单个点笛卡尔坐标 https://en.wikipedia.org/wiki/Cartesian_coordinate_system是一种“杀伤力”,因为一维数组已经能够存储计算机允许的尽可能多的数字,远远超过在笛卡尔坐标系中存储点所需的两个数字。