我有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。
答案 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