Проблема с Array — исключение NullReferenceException не было обработано — VB.NET

#arrays #vb.net

#массивы #vb.net

Вопрос:

Я в основном пытаюсь создать массив для экспорта отмеченных элементов в документ word. Но я получаю сообщение об ошибке

«Ссылка на объект не установлена для экземпляра объекта».

и

«Ссылка на ‘SelectedMutualFunds’ имеет значение ‘Ничего’

Ниже приведен мой код:

 Public Class ExportFunds
      Public SelectedMutualFunds() As String

 Private Sub ExportFundOkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExportFundOkButton.Click
           Dim i As Integer
    Dim array_Counter As Integer
    array_Counter = 0
    For i = 0 To ExportFundCheckedListBox.Items.Count() - 1
        If ExportFundCheckedListBox.GetItemCheckState(i) = CheckState.Checked Then
            SelectedMutualFunds(array_Counter) = ExportFundCheckedListBox.Items(i).ToString
            array_Counter  = 1
        End If
    Next
    Me.Close()
End Sub
 

Может кто-нибудь, пожалуйста, помочь мне решить эту проблему?

Комментарии:

1. там нет никаких доказательств того, что SelectedMutualFunds когда-либо создавался экземпляр, вы только объявили его. Используйте список (из строк), и вам не придется беспокоиться о размере массива.

2. Я объявил список (из строки), но теперь он говорит, что строка не может быть преобразована в список (из строки)

3. SelectedMutualFundsList.Add(ExportFundCheckedListBox.Items(i))

Ответ №1:

Вам необходимо указать длину вашего массива строк

  Public SelectedMutualFunds() As String
 

к следующему в ExportFundOkButton_Click перед использованием, предпочтительно непосредственно перед циклом for .

  Redim SelectedMutualFunds(ExportFundCheckedListBox.Items.Count() - 1)
 

Комментарии:

1. Добавляю ли я этот код в button_click или заменяю одну из строк, которая уже была написана в button_click ?

2. Поскольку изначально вы не указали какую-либо длину массива строк, вам необходимо добавить строку redim в существующий код button_click.

Ответ №2:

Вы можете свести это к однострочному и одновременно исправить исключение NullReference:

  Private Sub ExportFundOkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExportFundOkButton.Click
     SelectedMutualFunds = ExportFundCheckedListBox.Items.Where(Function(i) i.CheckState = CheckState.Checked).Select(Function(i) i.ToString()).ToArray()
     Me.Close()
End Sub
 

Или, немного длиннее, но легче для чтения:

 Private Sub ExportFundOkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExportFundOkButton.Click
     SelectedMutualFunds = ExportFundCheckedListBox.Items.
                Where(Function(i) i.CheckState = CheckState.Checked).
                Select(Function(i) i.ToString()).
                ToArray()
     Me.Close()
End Sub