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