Unity C中的2D数组IndexOutOfRange问​​题#

时间:2018-02-21 04:12:43

标签: c# unity3d unity5

我有35个Tile对象,我正在尝试将它们放入2D数组(和列表)中,但是在填充数组时我一直收到IndexOutofRange错误。我正在使用的代码是:

private Tile[,] AllTiles = new Tile[5,7]; 
private List<Tile> EmptyTiles = new List<Tile>();

// Use this for initialization
void Start () {

    Tile[] AllTilesOneDim = GameObject.FindObjectsOfType<Tile> ();
    foreach (Tile t in AllTilesOneDim) {

        // Fill 2D Array AllTiles
        AllTiles [t.indRow, t.indCol] = t;
        // Fill List with all tiles
        EmptyTiles.Add (t);

    }
}

我应该注意,每个Tile对象包含0到4之间的indRow的int和0-6之间的indCol的int。

1 个答案:

答案 0 :(得分:1)

在将图块添加到2D阵列之前,尝试添加一些防御性代码来检查范围。像:

int rows = AllTiles.GetLength(0);
int cols = AllTiles.GetLength(1);

int indRow = 0;
int indCol = 0;

foreach (Tile t in AllTilesOneDim) {
    indRow = t.indRow;
    indCol = t.indCol;

    if (indRow >= 0 && indRow < rows
        && indCol >= 0 && indCol < cols)
    {
        // Fill 2D Array AllTiles
        AllTiles[indRow, indCol] = t;
    }
}

使用调试器进入此路径并查看您找到的内容。 indRow和indCol值有时必须超出指定范围5(0到4)和7(0到6)。记住索引是基于零的,并且Length返回项目的总数,因此我们必须减去一个以找到正确的索引(或使用&#34;索引小于行或列#34;就像我在if语句中所做的那样)。 / p>

GetLength()方法:

https://msdn.microsoft.com/en-us/library/system.array.getlength.aspx

https://stackoverflow.com/a/4260228/8094831