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

时间:2016-04-02 16:26:09

标签: c# arrays indexing bounds

我正在制作一个奥赛罗/黑白棋游戏,我使用一个二维数组来保存棋盘上每个空间的内存。

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

想知道解决这个问题的最佳方法是什么?我想可能会换成一个列表,但我不确定这对于二维数组是否也能正常工作?

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

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

1 个答案:

答案 0 :(得分:1)

您只需检查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;