如何避免索引超出数组范围?

How to avoid index outside of bound of the array?

我正在制作一个 Othello/Reversi 游戏,我在其中使用二维数组来保存棋盘上每个 space 的内存。

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

想知道解决此问题的最佳方法是什么?我想也许可以换成一个列表,但我不确定这是否也适用于二维数组?

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

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

您只需检查 r + 1 是否为合法索引。拥有一个列表无济于事,因为您仍然会在列表范围之外进行检查。所以你只需要:

if (r + 1 > 7) return false;

你知道数组的大小。但是,为了避免 "magic numbers" 你最好获取数组第一维的上限:

if (r + 1 > grid.GetUpperBound(0)) return false;

您可以执行相同的操作来检查 c 是否在范围内:

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