VB.NET自定义类类型数组赋值触发空引用异常问题求解
问题根因
PowerArray是引用类型,你声明Public Shared CharPowers(100) As PowerArray时,仅创建了固定长度的数组容器,数组内所有元素默认初始化为Nothing,没有生成实际的PowerArray类实例。直接访问未实例化元素的属性,就会触发空引用异常。
修复方案
方案1:保持现有数组结构,赋值前先实例化对应下标的对象
在给指定下标元素的属性赋值前,先初始化该位置的PowerArray实例,示例代码如下:
' 先实例化当前下标对应的对象 GVar.CharPowers(GVar.PCount) = New PowerArray() ' 再进行属性赋值 GVar.CharPowers(GVar.PCount).Name = txtPowerName.Text ' 其他属性赋值操作 ' 赋值完成后更新计数 GVar.PCount += 1
方案2:改用动态集合优化实现(更推荐)
固定长度数组存在长度上限、空元素冗余等问题,改用List(Of T)可以避免上述问题,无需手动维护计数:
- 修改GVar类定义:
Public Class GVar Public Shared CharPowers As New List(Of PowerArray) End Class
- 新增元素的逻辑调整为:
' 实例化新对象并赋值属性 Dim newPower As New PowerArray() newPower.Name = txtPowerName.Text ' 其他属性赋值 ' 直接添加到集合 GVar.CharPowers.Add(newPower) ' 元素总数可通过GVar.CharPowers.Count直接获取
额外优化建议
你当前使用的ArrayList属于过时的非强类型集合,建议将PowerArray类中的Tags属性替换为强类型List(Of T),例如存储字符串时可修改为Public Tags As New List(Of String),避免运行时类型转换错误。
内容的提问来源于stack exchange,提问作者ecit
相关产品推荐
相关产品推荐

