C# I'之后的索引超出范围;我在不到10行之前就已经访问了该索引

C# I'之后的索引超出范围;我在不到10行之前就已经访问了该索引,c#,indexoutofboundsexception,C#,Indexoutofboundsexception,我正在创建一个小文本地牢爬虫,地牢的每一层都是一个2d房间阵列。出于某种原因,当您到达三楼时,在创建数组并确保所有房间都设置为null之后,当我设置房间时,当我到达楼层3[1,0]时,它会抛出一个超出边界的索引 使用断点并查看数组后,它显然有一个[1,0]以及[0,0]和[9,6]之间的所有其他值。我运行了一个for循环来访问该索引,并将其设置为null,然后尝试更改for循环,将所有房间改为测试室,但没有问题。我检查了大概十几次,以确保没有任何打字错误,或者我试图呼叫错误的楼层或任何类似的简单

我正在创建一个小文本地牢爬虫,地牢的每一层都是一个2d房间阵列。出于某种原因,当您到达三楼时,在创建数组并确保所有房间都设置为null之后,当我设置房间时,当我到达楼层3[1,0]时,它会抛出一个超出边界的索引

使用断点并查看数组后,它显然有一个[1,0]以及[0,0]和[9,6]之间的所有其他值。我运行了一个for循环来访问该索引,并将其设置为null,然后尝试更改for循环,将所有房间改为测试室,但没有问题。我检查了大概十几次,以确保没有任何打字错误,或者我试图呼叫错误的楼层或任何类似的简单操作。我还编写了一个简单的Console.Writeline(floor[1,0])测试行,以确保我不仅仅遗漏了一个拼写错误,我删除了该行,并且它也出现在任何超过该点的地方。同样,相同的方法适用于楼层1和2

floor3 = new RoomClass[9, 6];

//loop through everything and make sure that it's empty
for (int i = 0; i < 9; i++)
{
    for (int j = 0; j < 6; j++)
    {
        floor3[i, j] = null;
    }
}

//create rooms that actually need to exist.
floor3[0, 0] = new RoomClass("test1.", false, 0, 0);
floor3[0, 1] = new RoomClass("test2.", false, 0, 1);
floor3[0, 2] = new RoomClass("test5.", false, 0, 2);
floor3[0, 3] = new RoomClass("test3.", false, 0, 3);
floor3[0, 4] = new RoomClass("test4.", false, 0, 4);
floor3[0, 5] = new RoomClass("test5.", false, 0, 5);
floor3[0, 6] = new RoomClass("test5.", false, 0, 6);

floor3[1, 0] = new RoomClass("test6.", false, 1, 0);
floor3[1, 3] = new RoomClass("test7.", false, 1, 3);
floor3[1, 6] = new RoomClass("test8.", false, 1, 6);

floor3[2, 0] = new RoomClass("test9.", false, 2, 0);
(etc.)
floor3=新的RoomClass[9,6];
//循环检查所有内容并确保其为空
对于(int i=0;i<9;i++)
{
对于(int j=0;j<6;j++)
{
floor3[i,j]=null;
}
}
//创建实际需要存在的房间。
floor3[0,0]=新的RoomClass(“test1.”,false,0,0);
floor3[0,1]=新的RoomClass(“test2.”,false,0,1);
floor3[0,2]=新的RoomClass(“test5.”,false,0,2);
floor3[0,3]=新的RoomClass(“test3.”,false,0,3);
floor3[0,4]=新的RoomClass(“test4.”,false,0,4);
floor3[0,5]=新的RoomClass(“test5.”,false,0,5);
floor3[0,6]=新的RoomClass(“test5.”,false,0,6);
floor3[1,0]=新的RoomClass(“test6.”,false,1,0);
floor3[1,3]=新的RoomClass(“test7.”,false,1,3);
floor3[1,6]=新的RoomClass(“test8.”,false,1,6);
floor3[2,0]=新的RoomClass(“test9.”,false,2,0);
(等等)

这应该只检查所有重要的索引,并为每个索引创建一个空间。

floor3[0,6]
超出了数组的范围

正如
floor3[1,6]
,但它不会走那么远


注意,循环条件确保
j
小于
6
j
的最大值是
5

与C/C++不同,没有理由在C#中循环并将所有内容设置为null。它应该在这里抛出错误:floor3[0,6]不,它没有[9,6]-这些边界是独占的。您的for循环在到达
floor3[1,6]
之前停止。我忙着检查其他的东西,我甚至没想到它是6长,所以0-5。应该是9,7,所以至少我只需要改变一下,谢谢。