使用 c# 访问二维数组时出错

Posted

技术标签:

【中文标题】使用 c# 访问二维数组时出错【英文标题】:error accessing 2d array with c# 【发布时间】:2015-06-22 05:43:39 【问题描述】:

我是 Unity3D 和 c# 的新手。我正在修补在二维数组中存储一些网格位置,但是我遇到了

the array index is out of range

错误,我不知道为什么:

public int[,] myArray; 

    myArray = new int[,]
        0,375,
        75,300,
        150,225,
        225,150,
        300,75,
        375,0
    ;

    Debug.Log(myArray[1,4]); // array index is out of range... why? I expected to get 75.

以下是我寻求帮助的其他一些资源: http://wiki.unity3d.com/index.php/Choosing_the_right_collection_type

https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx

【问题讨论】:

【参考方案1】:

您有一个 6x2 的 2D 数组 - 而不是 2x6 的。如果您考虑通过array[row, column] 访问数组,那么您在初始化中指定的每个“子数组”都是一个“行”。

例如,myArray[0, 1] 是 375 - 第一个“行”的第二个元素,即 0, 375

基本上,您需要调整数组初始化或数组访问。所以如果你真的想要一个 2x6 数组,你需要:

myArray = new int[,] 
     0, 75, 150, 225, 300, 375 ,
     375, 300, 225, 150, 75, 0 
;

...或者您可以保留现有的初始化,并访问myArray[4, 1]

C# 规范是这样解释的:

对于多维数组,数组初始值设定项的嵌套级别必须与数组中的维数一样多。最外层的嵌套级别对应于最左边的维度,最内层的嵌套级别对应于最右边的维度。数组每个维度的长度由数组初始值设定项中相应嵌套级别的元素数量决定。对于每个嵌套数组初始值设定项,元素的数量必须与同一级别的其他数组初始值设定项相同。例子:

 int[,] b = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;

创建一个二维数组,最左边的维度长度为 5,最右边的维度长度为 2:

 int[,] b = new int[5, 2];

然后用以下值初始化数组实例:

b[0, 0] = 0; b[0, 1] = 1;
b[1, 0] = 2; b[1, 1] = 3;
b[2, 0] = 4; b[2, 1] = 5;
b[3, 0] = 6; b[3, 1] = 7;
b[4, 0] = 8; b[4, 1] = 9;

【讨论】:

以上是关于使用 c# 访问二维数组时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用浮点数遍历二维数组时出错

C++:使用函数为二维数组分配内存时出错

C#从函数返回二维数组索引

VBA - 使用二维数组的值填充单元格时出错

将二维字符串数组传递给函数时出错 (C++)

如何让 VC++ 以二维数组的形式访问指针