我已经看到2D数组被初始化为:
// Two-dimensional array with no boundary on dimension.
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
// The same array with dimensions specified.
int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
// The same array with implicit dimensions sizes.
int[,] array2Db = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
// Ref: https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx
但是,将其中一个维度初始化为零意味着什么?例如,我最近遇到过类似的事情:
int[,] array2Dzero = new int[0,4];
这是否意味着第一个尺寸可以是任何尺寸?如果是的话,有没有这方面的文件?
答案 0 :(得分:2)
这是否意味着第一个维度可以是任何大小?
不,这意味着第一个维度的大小为零。
请参阅:http://rextester.com/NYPLJ69377
这是什么意思?这意味着在您扩展该维度之前,阵列几乎无法使用。
array2Dzero[0,0] = 123; // IndexOutOfRangeException
答案 1 :(得分:2)
这意味着整个数组的长度为零。内存中数组的长度是所有尺寸长度的乘积。您可以通过以下方式进行验证:
Console.WriteLine(array2Dzero.Length);
此输出将为“0”
答案 2 :(得分:1)
int[,] array2Dzero = new int[0,4];
它确实使第一个维度为零。所以它有0 * 4个元素,或者只有0个元素。 因此,以这种方式初始化意味着它要在代码中稍后将第一个维度更改为另一个永久状态,否则就不会使用该数组。然而,这是一个锯齿状的阵列,或者只是等到程序的后期才会出现这种情况。数组可能仍然是一个更好的解决方案。