如何安全地检查数组边界

时间:2010-10-30 10:15:55

标签: c# arrays

我在二维阵列中制作生命游戏。我需要确定所有相邻单元格何时为空,所以我只测试所有单元格。除非被检查的单元格是边界,否则它很有效。然后测试X + 1当然会抛出异常,因为索引超出了数组边界。我能以某种方式处理这个而不是处理异常吗? 感谢

4 个答案:

答案 0 :(得分:5)

使用GetLength(0)GetLength(1)来获取数组的宽度和高度。

运行时还使用了一个简洁的性能技巧来进行自己的边界检查:转换为unsigned int以将两个检查减少为一个。但是,如果检查确实对性能至关重要,那么您可以使用它。

(i >= 0) && (i < length)

变为

(uint)i < length

答案 1 :(得分:4)

如果你想要速度,你将不得不区别对待边缘细胞,并用

处理其余部分
for(int x = 1; x < Size-1; x++)  // these all have x-1 and x+1 neighbours

答案 2 :(得分:1)

是的,在访问索引i + 1的元素之前,请检查i + 1是否严格低于array.Length

答案 3 :(得分:1)

我为2D数组创建了一个扩展方法来检查是否在边界内:

for(int i = 0; i < 243; i++)