首页 > 解决方案 > 没有空引用异常,无法获取空数组的长度

问题描述

编辑:我已经知道空引用异常是什么。我想不通的是如何设置我的代码,以便它读取空数组的长度而不会引发空引用异常。

我有一个表单,每次单击“提交”按钮时都需要将一个项目添加到一组并行数组中。我需要一种确保索引递增的方法,因此我编写了代码,以便它获取一个数组的长度并减去 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

标签: arraysvb.netnullreferenceexception

解决方案


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

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

您的数组是在堆栈上声明的,因此您需要事先通知 VB 它的大小。由于您从不这样做,因此您实际上没有数组。这就是你得到NullReferenceException的原因:你寻找一个数组的(不存在的)内容。

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


推荐阅读