我发现在旧代码中有以下这行代码:
protected bool[,] PixelsChecked;
这里的
[,]
是什么意思?我发现在旧代码中有以下这行代码:
protected bool[,] PixelsChecked;
[,]
是什么意思?这是一个二维数组。
.NET中有两种不是单一维度的数组:
多维数组:
int[,] a; // 2 dimensions
int[,,] b; // 3 dimensions, and so on
嵌套数组(数组的数组):
int[][] a; // an array of arrays of ints
int[][][] a; // an array of arrays of arrays of ints
在这两种情况下,在使用变量之前需要初始化它。
用法也是不同的,在第一种情况下:
int value = a[1, 2]; // note the comma, and single pair of brackets
在第二种情况下,您需要分别处理每个数组:
int value = a[1][2]; // the first [1] will return an array, and then you take
// the 3rd element (0-based) of that
还要记得,你可以在一条语句中初始化一个多维数组:
int[,] a = new int[10, 20];
相比之下,针对锯齿数组的单个语句将创建一个充满空引用的单个数组:
int[][] a = new int[10][];
您还需要将该数组的所有元素初始化为它们对应的数组引用,以下是使用LINQ在一条语句中快速完成此操作的方法:
您还需要将该数组的所有元素初始化为它们对应的数组引用,以下是使用LINQ在一条语句中快速完成此操作的方法:
int[][] a = Enumerable.Range(0, 10).Select(new int[20]).ToArray();
// 10 x 20
还可参考MSDN页面获取更多信息。
有趣的是,JITter为访问锯齿数组生成的代码比访问多维数组的代码更快,有关详细信息请参见此问题。
[,]
是一个二维数组。protected bool[,] PixelsChecked = new bool[Width, Height];
bool leftTop = PixelsChecked[0, 0];
这基本上是一个带有值的矩形,你可以使用[x,y]
来访问它们。
你也可以使用以下方式创建三维及以上的数组:
protected bool[,,] Cube = new bool[5,5,5];
protected bool[,,,] _4dimensional = new bool[10,10,10,10];
这是多维数组的语法。
数组可以有多个维度。
在这种情况下,它是二维数组。一个数组可以有很多维度。在C#中,可以使用特殊的语法来使用多维数组。
对于语法用法,如果您想声明n-维数组,则应使用逗号n-1
次。
当您使用bool[,] PixelsChecked
时,它声明了一个名为PixelsChecked
的二维数组,并将其元素类型定义为boolean
。
例如;
bool[,] PixelsChecked = new bool[2,2];
PixelsChecked[0, 0] = true;
PixelsChecked[0, 1] = false;
PixelsChecked[1, 0] = true;
PixelsChecked[1, 1] = false;
bool[,]
是一个包含bool
类型的二维数组。
基本上,这个数组不像这样:
true, false, false, true, false, true, etc.
它的结构类似于这样:
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
etc.
因此,您可以像这样访问第二个项目和第三个右侧的项目:
arrayName[1,2];
还有其他方法可以做到这一点,比如制作数组的数组,但这种方法保持了恒定的长度,更好。