编辑:我已经知道什么是空引用异常。我不知道如何设置我的代码,以使其在不引发空引用异常的情况下读取空数组的长度。
我有一个表单,每次单击“提交”按钮时,都需要向一组并行数组中添加一个项目。我需要一种确保索引递增的方法,因此,我编写了代码,以使其获取一个数组的长度,并减去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
答案 0 :(得分:1)
我看到您的代码存在多个问题,但是我们现在将重点放在CountyAndState
上。首先,它被声明为数组,但从未初始化。数组不是动态的。您熟悉指针吗?让我解释一下:
当声明一个由6个项目组成的数组时,VB为堆栈上的6个项目“保留”足够的空间。声明列表时,VB在 stack 上“保留”足够的空间以知道它将在何处存储列表中包含的信息,并将此信息存储在堆中。
您的数组在堆栈上声明,因此您需要事先告知VB其大小。由于您从不执行此操作,因此实际上没有数组。这就是为什么得到 NullReferenceException 的原因:您要查找数组的(不存在的)内容。
另一方面,List(Of String)
会做您想要的事情,并且仍然是动态的。尝试像这样初始化它:Dim CountyAndState As New List(Of String)
,玩得开心!