没有空引用异常无法获取空数组的长度

时间:2019-07-06 04:31:17

标签: arrays vb.net nullreferenceexception

编辑:我已经知道什么是空引用异常。我不知道如何设置我的代码,以使其在不引发空引用异常的情况下读取空数组的长度。

我有一个表单,每次单击“提交”按钮时,都需要向一组并行数组中添加一个项目。我需要一种确保索引递增的方法,因此,我编写了代码,以使其获取一个数组的长度,并减去1以获取存储在变量中的索引。但是,对于数组中的第一项,我不断收到空引用错误:'Object reference not set to an instance of an object.'

我不确定该怎么做,因为数组是在类级别定义的,不能具有任何值,直到将某些内容添加到它们中为止。我不能仅仅告诉它myArray(0)的值是什么,因为每次用户单击“提交”时,该值都会被覆盖。我该如何工作?感谢您的帮助:)

这是我的代码:

Option Strict On

Public Class frmMain

    'Declare arrays to store data
    Dim CountyAndState() As String
    Dim YearlyIncome() As Double

    Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click

        'Validate inputs and assign data to arrays
        'Reset colors for inputs
        cboCountyState.BackColor = Color.White
        txtYearlyIncome.BackColor = Color.White

        'Declare variables
        Dim strResidence As String
        Dim dblIncome As Double
        Dim intIndex As Integer

        'Validate input
        If Validation(CStr(cboCountyState.SelectedItem), txtYearlyIncome.Text) = True Then

            'Assign values to variables
            dblIncome = CDbl(txtYearlyIncome.Text)
            strResidence = CStr(cboCountyState.SelectedItem)

            'Get index for new array item
            If CountyAndState.Length > 1 Then '*****THIS IS WHERE THE ERROR OCCURS******
                intIndex = (CountyAndState.Length - 1)
            Else
                intIndex = 0
            End If

            'Add items to arrays
            CountyAndState(intIndex) = strResidence
            YearlyIncome(intIndex) = dblIncome

            MessageBox.Show(CountyAndState(intIndex))

        End If



    End Sub

1 个答案:

答案 0 :(得分:1)

我看到您的代码存在多个问题,但是我们现在将重点放在CountyAndState上。首先,它被声明为数组,但从未初始化。数组不是动态的。您熟悉指针吗?让我解释一下:

当声明一个由6个项目组成的数组时,VB为堆栈上的6个项目“保留”足够的空间。声明列表时,VB在 stack 上“保留”足够的空间以知道它将在何处存储列表中包含的信息,并将此信息存储在中。

您的数组在堆栈上声明,因此您需要事先告知VB其大小。由于您从不执行此操作,因此实际上没有数组。这就是为什么得到 NullReferenceException 的原因:您要查找数组的(不存在的)内容。

另一方面,List(Of String)会做您想要的事情,并且仍然是动态的。尝试像这样初始化它:Dim CountyAndState As New List(Of String),玩得开心!