VB类中如何定义无预指定长度的二维数组且不影响GetLength等方法使用
解决方案
问题原因
你遇到的GetLength无法正常使用,通常是两个原因导致:
- 修改声明时漏写了二维数组标识
(,),只写了Public board As Object,编译期board被识别为普通Object类型,不识别数组方法; - 数组还未完成赋值初始化,就调用
GetLength引发空引用异常。
正确实现步骤
- 第一步:修改Maze类中
board的声明,明确指定为动态二维数组,不要丢失数组维度标识(,):
Class Maze ' 声明为未指定长度的二维Object数组,不要写成 Public board As Object Public board(,) As Object End Class
- 第二步:通过对象初始化器赋值后,就可以正常调用
GetLength方法:
' 初始化10*10迷宫 Dim maze1 As New Maze With {.board = { {" ", " ", "X", "X", " ", "X", "X", "X", " ", "X"}, {"X", " ", " ", " ", " ", "X", " ", " ", " ", "X"}, {" ", " ", "X", " ", "X", " ", " ", " ", " ", "X"}, {"X", " ", "X", " ", " ", "X", "X", "X", " ", " "}, {"X", " ", "X", "X", " ", " ", " ", " ", "X", " "}, {" ", "X", " ", " ", "X", " ", " ", "X", " ", " "}, {" ", "X", "X", " ", "X", " ", " ", " ", " ", "X"}, {" ", " ", " ", " ", " ", "X", "X", " ", " ", "X"}, {"X", "X", " ", "X", " ", " ", " ", "X", " ", " "}, {" ", " ", " ", "X", "X", " ", " ", " ", "X", " "} }}
- 第三步:调用
GetLength获取维度长度,参数0对应第一维(行数),参数1对应第二维(列数):
' 输出10,即第一维长度 Console.WriteLine(maze1.board.GetLength(0)) ' 输出10,即第二维长度 Console.WriteLine(maze1.board.GetLength(1))
扩展:支持自定义尺寸的迷宫
如果需要灵活创建不同尺寸的迷宫,可以给Maze类添加构造函数,提前初始化数组:
Class Maze Public board(,) As Object ' 带参数的构造函数,指定行列数初始化数组 Sub New(rows As Integer, cols As Integer) ReDim board(rows - 1, cols - 1) End Sub ' 保留无参数构造函数,支持对象初始化器赋值 Sub New() End Sub End Class
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

