C# 如何避免索引超出数组的界限?

C# 如何避免索引超出数组的界限?,c#,arrays,indexing,bounds,C#,Arrays,Indexing,Bounds,我正在制作一个《奥赛罗》/《反转》游戏,我使用一个2d阵列来保存棋盘上每个空格的内存 为了检查有效的移动,我使用了一个if语句,其中我使用r+1来检查同一行上的下一个空格。然而,由于数组只有[8,8]大,当我遇到r为8的情况时,我会得到一个错误,因为它试图检查数组中的第9个元素。这给了我一个索引越界错误 我想知道解决这个问题的最好方法是什么?我想可能会切换到列表,但我不确定这是否也适用于2d阵列 public box[,] grid = new box[8, 8]; if ((grid[r +

我正在制作一个《奥赛罗》/《反转》游戏,我使用一个2d阵列来保存棋盘上每个空格的内存

为了检查有效的移动,我使用了一个if语句,其中我使用r+1来检查同一行上的下一个空格。然而,由于数组只有[8,8]大,当我遇到r为8的情况时,我会得到一个错误,因为它试图检查数组中的第9个元素。这给了我一个索引越界错误

我想知道解决这个问题的最好方法是什么?我想可能会切换到列表,但我不确定这是否也适用于2d阵列

public box[,] grid = new box[8, 8];

if ((grid[r + 1, c].value == currentPlayer)
        {
            return true;
        }

您只需检查
r+1
是否为合法索引。拥有一个列表是没有帮助的,因为你仍然会检查超出列表范围的内容。因此,您只需要:

if (r + 1 > 7) return false;
正如您所知道的,阵列的大小。但是,为了避免“幻数”,最好获取数组第一维的上界:

if (r + 1 > grid.GetUpperBound(0)) return false;
对于检查
c
是否在范围内,也可以执行相同的操作:

if (c < 0 || c > grid.GetUpperBound(1)) return false;
if(c<0 | | c>grid.GetUpperBound(1))返回false;

如何避免?检查索引是否不在边界之外。:-)考虑使用<代码>长度>代码>属性或<代码>长度()/代码>方法,使用数组的大小来确定大小。常数int SIZE=8;您可以为游戏场创建一个单独的类。该字段只能通过为您执行边界检查的特定方法访问。这样,您只需实现一次检查逻辑。