Unity C# 中的二维数组 IndexOutOfRange 问题
2D Array IndexOutOfRange Issue in Unity C#
我有 35 个 Tile 对象,我试图将它们放入二维数组(和列表)中,但在填充数组时我不断收到 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 对象都包含一个 intRow 的 0-4 之间的 int 和一个 0-6 之间的 indCol 的 int。
在将图块添加到二维数组之前,尝试添加一些防御代码来检查范围。喜欢:
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)。请记住,索引是从零开始的,长度 returns 是项目的总数,因此我们必须减去一个才能找到正确的索引(或者像我在 if 语句中那样使用 "index less than rows or cols")。
GetLength() 方法:
https://msdn.microsoft.com/en-us/library/system.array.getlength.aspx
我有 35 个 Tile 对象,我试图将它们放入二维数组(和列表)中,但在填充数组时我不断收到 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 对象都包含一个 intRow 的 0-4 之间的 int 和一个 0-6 之间的 indCol 的 int。
在将图块添加到二维数组之前,尝试添加一些防御代码来检查范围。喜欢:
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)。请记住,索引是从零开始的,长度 returns 是项目的总数,因此我们必须减去一个才能找到正确的索引(或者像我在 if 语句中那样使用 "index less than rows or cols")。
GetLength() 方法:
https://msdn.microsoft.com/en-us/library/system.array.getlength.aspx