Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно инициализировать свойства объекта - Visual Basic .NET / 7 сообщений из 7, страница 1 из 1
16.06.2017, 09:16
    #39472844
SSR2017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно инициализировать свойства объекта - Visual Basic .NET
Добрый день, товарищи-форумчане!
Помогите с VB net.
Имеется следующий класс

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
Partial Public Class pledgeNotificationPackageType
        
        Private packageIdField As String
        
        Private uipField As String
        
        Private senderTypeField As senderTypeType
        
        Private pledgeNotificationListField() As pledgeNotificationListElementType
        
        '''<remarks/>
        Public Property packageId() As String
            Get
                Return Me.packageIdField
            End Get
            Set
                Me.packageIdField = value
            End Set
        End Property
        
        '''<remarks/>
        Public Property uip() As String
            Get
                Return Me.uipField
            End Get
            Set
                Me.uipField = value
            End Set
        End Property
        
        '''<remarks/>
        Public Property senderType() As senderTypeType
            Get
                Return Me.senderTypeField
            End Get
            Set
                Me.senderTypeField = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlArrayItemAttribute("pledgeNotificationListElement", IsNullable:=false)>  _
        Public Property pledgeNotificationList() As pledgeNotificationListElementType()
            Get
                Return Me.pledgeNotificationListField
            End Get
            Set
                Me.pledgeNotificationListField = value
            End Set
        End Property
    End Class



И еще один:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Partial Public Class pledgeNotificationListElementType
        
        Private notificationIdField As String
        
        Private documentAndSignatureField() As Byte
        
        '''<remarks/>
        Public Property notificationId() As String
            Get
                Return Me.notificationIdField
            End Get
            Set
                Me.notificationIdField = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlElementAttribute(DataType:="base64Binary")>  _
        Public Property documentAndSignature() As Byte()
            Get
                Return Me.documentAndSignatureField
            End Get
            Set
                Me.documentAndSignatureField = value
            End Set
        End Property
    End Class



Инициализирую класс и его свойства:
Код: vbnet
1.
2.
3.
4.
5.
Dim pType As pledgeNotificationPackageType = New pledgeNotificationPackageType
pType.packageId = "fefac464-c8e1-4f40-8278-06f6b42983ce" 
pType.uip = "100000000000000000"
pType.senderType = "1"
pType.pledgeNotificationList(0).notificationId = "27f31b86-8586-4f0e-91af-98e8367dd8dc"



Но на последней строке вылетает исключение:
Необработанное исключение типа "System.NullReferenceException"
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.

Подскажите, как правильно инициализировать pType.pledgeNotificationList?
...
Рейтинг: 0 / 0
16.06.2017, 11:34
    #39473001
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно инициализировать свойства объекта - Visual Basic .NET
SSR2017,

Массив pledgeNotificationListField() только объявляется, явно в приведённом коде не создаётся.
Его создание можно было бы втиснуть в конструктор класса pledgeNotificationPackageType.
...
Рейтинг: 0 / 0
16.06.2017, 11:45
    #39473017
SSR2017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно инициализировать свойства объекта - Visual Basic .NET
Barkan,
подскажите, как это сделать? но хотелось бы объявить его прямо в коде, если такое возможно.
Просто описание класса описано сторонним разработчиком.
...
Рейтинг: 0 / 0
16.06.2017, 12:16
    #39473050
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно инициализировать свойства объекта - Visual Basic .NET
SSR2017,

Попробуй вот так:

Private pledgeNotificationListField() As pledgeNotificationListElementType = {New pledgeNotificationListElementType()}

или

Private pledgeNotificationListField(0) As pledgeNotificationListElementType
pledgeNotificationListField(0) = New pledgeNotificationListElementType()
...
Рейтинг: 0 / 0
19.06.2017, 12:33
    #39474072
SSR2017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно инициализировать свойства объекта - Visual Basic .NET
Barkan,

Если прописываю так
Код: vbnet
1.
Private pledgeNotificationListField() As pledgeNotificationListElementType = {New pledgeNotificationListElementType()}


Затем пробую добавить 5 элементов

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim i As Integer
Dim str As String = "8a0e57e4-779a-435c-bc29-909d08f90479" 
сonsole.WriteLine("Длина массива " & pType.pledgeNotificationList.Length)
 For i = 0 To 4
            Console.WriteLine(i)
            pType.pledgeNotificationList(i).notificationId = str
 Next



Размер массива = 1.
Ошибка Индекс находился вне границ массива.

Пробую изменить размер массива
Код: vbnet
1.
ReDim Preserve pType.pledgeNotificationList(0 To 4)


Тогда ругается на: Ссылка на объект не указывает на экземпляр объекта.
...
Рейтинг: 0 / 0
19.06.2017, 13:55
    #39474122
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно инициализировать свойства объекта - Visual Basic .NET
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private pledgeNotificationListField() As pledgeNotificationListElementType

        ReDim pType.pledgeNotificationList(0 To 4)
        For i = 0 To 4
            Console.WriteLine(i)
            pType.pledgeNotificationList(i) = New pledgeNotificationListElementType With {.notificationId = sStr}
        Next

Str это имя VB-функции, не надо так называть переменные.
...
Рейтинг: 0 / 0
19.06.2017, 14:11
    #39474133
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно инициализировать свойства объекта - Visual Basic .NET
SSR2017,

Никто же не знает сколько надо элементов массива. В примере я показал создание массива из 1 элемента.
Если надо 5, то пишите так:

Код: vbnet
1.
Private pledgeNotificationListField() As pledgeNotificationListElementType = {New pledgeNotificationListElementType(), New pledgeNotificationListElementType(), New pledgeNotificationListElementType(), New pledgeNotificationListElementType(), New pledgeNotificationListElementType()}



или

Код: vbnet
1.
2.
3.
4.
5.
6.
Private pledgeNotificationListField(4) As pledgeNotificationListElementType
pledgeNotificationListField(0) = "sdjfhsdjkfh"
pledgeNotificationListField(1) = "sdjfhsdjkfh"
pledgeNotificationListField(2) = "sdjfhsdjkfh"
pledgeNotificationListField(3) = "sdjfhsdjkfh"
pledgeNotificationListField(4) = "sdjfhsdjkfh"



А с ReDim по моему указание размера (0 To 4) не катит. Просто пишите

Код: vbnet
1.
ReDim Preserve pType.pledgeNotificationList(4)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно инициализировать свойства объекта - Visual Basic .NET / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]