You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2017数组报错:System.NullReferenceException修复求助

修复VB.NET中的System.NullReferenceException错误

你遇到的System.NullReferenceException是因为你声明的数组没有被初始化。在VB.NET中,当你写Dim StudentName() As String这种语法时,只是声明了一个数组变量,但它并没有指向实际的数组对象(也就是Nothing),直接给它的索引赋值自然会报错。另外你的代码里还有索引逻辑的问题,比如btnAdd里Index自增后去访问StudentName(Index),这时候这个位置还没有被赋值,也会出问题。

推荐解决方案:改用List(Of T)代替数组

数组需要预先指定大小,对于这种动态添加学生信息的场景,List(Of T)是更合适的选择——它支持动态扩容,不需要手动管理大小,避免空引用和数组越界问题。下面是修改后的完整代码:

Public Class Form1
    ' 用List存储学生信息,支持动态添加
    Private studentNames As New List(Of String)()
    Private exam1Scores As New List(Of Integer)()
    Private exam2Scores As New List(Of Integer)()
    Private exam3Scores As New List(Of Integer)()

    Private Sub btnDetails_Click(sender As Object, e As EventArgs) Handles btnDetails.Click
        lstStudent.Items.Clear() ' 清空列表,避免重复显示
        ' 遍历所有学生,拼接信息后添加到列表
        For i As Integer = 0 To studentNames.Count - 1
            ' 优化信息展示格式,更易读
            Dim studentInfo As String = $"{studentNames(i)} | 考试1: {exam1Scores(i)} 分 | 考试2: {exam2Scores(i)} 分 | 考试3: {exam3Scores(i)} 分"
            lstStudent.Items.Add(studentInfo)
        Next
    End Sub

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        ' 先验证成绩输入是否有效,避免转换失败
        Dim mark1, mark2, mark3 As Integer
        If Not Integer.TryParse(txtMark1.Text, mark1) OrElse
           Not Integer.TryParse(txtMark2.Text, mark2) OrElse
           Not Integer.TryParse(txtMark3.Text, mark3) Then
            MessageBox.Show("请输入有效的整数成绩!")
            Return
        End If

        ' 将输入的信息添加到对应List中
        studentNames.Add(txtStudentName.Text.Trim())
        exam1Scores.Add(mark1)
        exam2Scores.Add(mark2)
        exam3Scores.Add(mark3)

        ' 清空输入框,方便下一次输入
        txtStudentName.Clear()
        txtMark1.Clear()
        txtMark2.Clear()
        txtMark3.Clear()
        txtStudentName.Focus()
    End Sub
End Class

关键改动说明:

  • 替换数组为List:List(Of T)的Add方法可以直接添加元素,不需要提前初始化大小,彻底解决空引用问题。
  • 添加输入验证:用Integer.TryParse检查成绩是否为有效整数,避免用户输入非数字时抛出转换错误。
  • 优化信息展示:修改了学生信息的拼接格式,让输出更清晰易读,同时修复了原代码中Identity拼接时的逻辑错误(原代码直接把成绩连在一起,没有分隔,还误用了乘法)。
  • 清理输入框:添加了清空输入框的逻辑,提升用户体验。

如果你坚持要使用数组,需要先初始化数组的大小(比如Dim StudentName(9) As String,最多存10个学生),并且在Index达到数组长度时手动扩容,但这种方式不如List灵活,所以更推荐上面的List方案。

内容的提问来源于stack exchange,提问作者George Hales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:41:31