VB.Net中二维MazeCellInfo数组出现NullReferenceException的原因?
VB.Net中System.NullReferenceException异常原因分析
这段代码抛出System.NullReferenceException的核心原因是:你只声明了二维数组的结构,但数组中的每个MazeCellInfo对象都没有被实例化。
在VB.Net中,当创建引用类型的数组时,数组的所有元素默认值都是Nothing(等价于C#里的null)。你直接通过With MazeCell(X, Y)访问数组元素的属性时,本质是在操作一个未初始化的空对象,自然会触发空引用异常。
修复方法
在循环中先给每个数组元素创建MazeCellInfo实例,再设置属性:
Private Sub NewMazeGrid() Dim X As Integer Dim Y As Integer 'Create an 2d array with MazeCell object Dim MazeCell(nudX.Value, nudY.Value) As MazeCellInfo For X = 0 To nudX.Value - 1 For Y = 0 To nudY.Value - 1 '先实例化MazeCellInfo对象 MazeCell(X, Y) = New MazeCellInfo() With MazeCell(X, Y) .NorthWall = "Wall" .SouthWall = "Wall" .EastWall = "Wall" .WestWall = "Wall" End With Next Next '注意:需确保nudX.Value >5 且 nudY.Value>5,否则会触发索引越界异常 lSample.Text = MazeCell(5, 5).EastWall End Sub
额外提醒:最后一行访问MazeCell(5,5)时,如果nudX.Value或nudY.Value的值小于等于5,后续还会触发IndexOutOfRangeException,需要根据实际需求处理数组边界问题。
内容的提问来源于stack exchange,提问作者Sandfox
相关产品推荐
相关产品推荐

