为什么在重新声明其他结构中的结构数组后,我会收到 NullReference 错误?



所以我有这个数据结构的东西是相当开放的,存储的数据量。数据通过一系列结构存储。以下是我正在使用的结构和变量:

Dim CurrentRec As Year
Structure Year
    Dim Months() As Month
End Structure
Structure Month
    Dim Dayz() As Days
    Dim MiscExpend(,) As String
End Structure
Structure Days
    Dim Incomes(,) As String
    Dim Expenditures(,) As String
End Structure

现在我有一个小的测试子程序来测试它是否有效。

Sub Test()
    ReDim CurrentRec.Months(12).Dayz(31).Incomes(4, 4)
    ReDim CurrentRec.Months(12).Dayz(31).Expenditures(4, 4)
    CurrentRec.Months(5).Dayz(12).Incomes(1, 1) = 5
End Sub

问题是,这段代码会吐出一个System.NullReferenceException错误,我无法弄清楚为什么。谁能帮忙?

您需要

单独ReDim每个数组:

ReDim CurrentRec.Months(12)
ReDim CurrentRec.Months(12).Dayz(31)
ReDim CurrentRec.Months(12).Dayz(31).Incomes(4, 4)
ReDim CurrentRec.Months(12).Dayz(31).Expenditures(4, 4)
CurrentRec.Months(5).Dayz(12).Incomes(1, 1) = 5

现在:

ReDim CurrentRec.Months(12).Dayz(31).Incomes(4, 4)

Attemtps 以重新显示最后一个成员Incomes(,)但此时MonthsDayz未标注尺寸,因此出现错误。

您尚未实例化任何内容。对数组进行变暗或重新变暗不会实例化其任何元素,它只是修改其大小。数组的所有元素仍然为空。

编辑:嘎,我上面说的是完全错误的,我刚刚意识到为什么。

不保留的初始化。如果未指定 Preserve,ReDim 将使用新数组的数据类型的默认值初始化新数组的元素。

来自 ReDim 文档。结构的默认值为结构,而不是 null。结构不能为空。

最新更新