arrays - 没有空引用异常,无法获取空数组的长度
问题描述
编辑:我已经知道空引用异常是什么。我想不通的是如何设置我的代码,以便它读取空数组的长度而不会引发空引用异常。
我有一个表单,每次单击“提交”按钮时都需要将一个项目添加到一组并行数组中。我需要一种确保索引递增的方法,因此我编写了代码,以便它获取一个数组的长度并减去 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
解决方案
我可以看到您的代码存在多个问题,但我们CountyAndState
现在将重点关注。首先,它被声明为一个数组,但从未初始化。数组不是动态的。你熟悉指针吗?让我解释:
当您声明一个包含 6 个项目的数组时,VB 为堆栈上的 6 个项目“保留”了足够的空间。当您声明一个列表时,VB 在堆栈上“保留”足够的空间以知道它将存储列表中包含的信息的位置,并将此信息存储在堆上。
您的数组是在堆栈上声明的,因此您需要事先通知 VB 它的大小。由于您从不这样做,因此您实际上没有数组。这就是你得到NullReferenceException的原因:你寻找一个数组的(不存在的)内容。
另一方面, aList(Of String)
会做你想做的事,并且仍然是动态的。尝试像这样初始化它:Dim CountyAndState As New List(Of String)
玩得开心!
推荐阅读
- angular - 函数数量的 Observables
- python - 如何在 Python3 中将字符串从 cp1251 转换为 UTF-8?
- c# - 找不到元素硒 C#
- git - 更改 Git 子模块提交
- python - 如何将 tf.glorot_uniform_initializer() 传递给 tf.Variable(0 而不是 get_variable()
- java - return 语句不结束方法 java
- ml.net - 如何使用 ml.net 处理课程?
- verilog - SystemVerilog 中的循环积分运算符
- python - Django wagtail,将视频上传到文本块时出错
- c# - 查找包含十进制值的数据表列的总和