2014-12-01 2 views
1

Итак, у меня есть эта структура данных, которая должна быть довольно открытой, с объемом хранимых данных. Данные хранятся через ряд структур. Вот структуры и переменный я использую:Почему я получаю ошибку 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, и я не могу за как мне понять, почему. Может ли кто-нибудь помочь?

ответ

1

Вы должны были бы 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 для Redim последнего члена Incomes(,), но в тот момент Months и Dayz являются безразмерные, следовательно, ошибка.

0

Вы ничего не создавали. Dim-ing или ReDim-in массив не создает экземпляр каких-либо элементов, он просто корректирует его размер. Все элементы массива по-прежнему равны нулю.

Редактировать: Gah, что я сказал выше, было совершенно неправильно, и я только что понял, почему.

Инициализация без сохранения. Если вы не укажете Preserve, ReDim инициализирует элементы нового массива, используя значение по умолчанию для своего типа данных.

От ReDim documentation. По умолчанию struct является struct, а не null. Структуры не могут быть нулевыми.

Смежные вопросы