Проблемма с массивом структур

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Dethlord
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.11.2007 (Пн) 14:09

Проблемма с массивом структур

Сообщение Dethlord » 07.01.2009 (Ср) 7:01

В модуле:
Public Structure NEYRON
Public DNA() as String
End Structure


В форме:

Dim NET(0 to 50) as NEYRON
REdim NET(0 to 50).DNA(0 to 50)
NET(49).DNA(0)="ГЦЦГ"


Данный код вызовет ошибку (а именно последняя строка):В экземпляре не заданна сылка на обьект.

Так почему код начинает работать при такой ситуации если последнюю строку заменить на

NET(50).DNA(0)="ГЦЦГ"

Я весь день сидел так и не понял че за тема?
Причем реализовывая массив структур руководвовался MSDN.
Бред какой-то.
Что предложите?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Проблемма с массивом структур

Сообщение Nord777 » 07.01.2009 (Ср) 11:31

Массивы в Net начинаются с нуля, поэтому нет необходимости в такой форме записи Dim NET(0 to 50) As NEYRON

1) Dim NET(50) As NEYRON - выделил память под массив структур типа NEYRON, размером в 51 элемент
2) ReDim NET(50).DNA(50) - Для пятьдесят первой структуры NEYRON выделил память под массив строк размером в пятьдесят один элемент
3) NET(49).DNA(0) = "ГЦЦГ" - Для пятидесятой структуры не была выделена память под массив типа String, поэтому исключение.

Что предложите?

Для каждой структуры в массиве NET делать инициализацию строкового массива DNA
Код: Выделить всё
        For i As Integer = 0 To NET.Length - 1
            ReDim NET(i).DNA(50)
        Next

или так, оба варианта идентичны

        For i As Integer = 0 To NET.Length - 1
            NET(i).DNA = New String(50) {}
        Next
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Dethlord
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.11.2007 (Пн) 14:09

Re: Проблемма с массивом структур

Сообщение Dethlord » 07.01.2009 (Ср) 13:47

СПАСИБИЩЕ БОЛЬШОЕ
Я смысл уловил
но почему например нам не потребовалось проитись и по DNA вот так:
Код: Выделить всё
For t=0  as integer to 50
Redim NET(i).DNA(i)
next t

такое чувство что программа коректно понимает DNA(50) но не понимает NET(50)(в более раннем примере)
это из за спецефичности ситуации? или не доработка системы программирования?
СПАСИБО!!!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Проблемма с массивом структур

Сообщение Nord777 » 07.01.2009 (Ср) 17:34

но почему например нам не потребовалось проитись и по DNA вот так:
Я ничего не понял, сформулируй свой вопрос более ясно. Если ты хочешь одним оператором инициализировать несколько массивов, то это не получится.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Проблемма с массивом структур

Сообщение Sebas » 07.01.2009 (Ср) 18:06

Жёсткая проверка типов стоит?

Redim "редимит" только массив структур 50го элемента. Что тут не понятно? Есстестно 49 нах.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Проблемма с массивом структур

Сообщение Nord777 » 07.01.2009 (Ср) 18:40

Жёсткая проверка типов стоит?
А это-то тут каким боком? У него ссылочный тип(Public DNA() as String) в структуре = Nothing, отсюда и исключение. При чем тут проверка типов... :roll:
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList  
cron