尝试填充数组时出现“System.NullReferenceException”

时间:2010-02-18 21:13:20

标签: vb.net arrays

这是我的代码:

Public UserBookings() As String

    If dr.Read() Then
        Dim intCounter As Integer
        intCounter = 0
        While dr.Read()
            UserBookings(intCounter) = dr(0)
            intCounter = intCounter + 1
        End While
        Return UserBookings
    Else
        Return False
    End If

但是我在运行时遇到了这个错误:

A first chance exception of type 'System.NullReferenceException' occurred in Project.exe

阵列似乎甚至没有填满。

我能做些什么来解决这个问题?请记住它是一个动态数组(我不确定它将有多少条目)所以我不知道如何遍历每个条目并给它一个初始值。

感谢。

3 个答案:

答案 0 :(得分:0)

好像你的dr(0)是一个空对象,但是尝试在它的末尾添加.ToString()。但当然这取决于UserBookings()的数据类型。

与我的同事谈话

你应该使用dr.HasRows而不是“if dr.read()”,因为你正在丢失一整行。

答案 1 :(得分:0)

在此处作为可能答案列出的问题中,我还看到当方法的返回类型为字符串时,您在某一点返回False。这是不允许的。您可以返回Nothing或String.Empty,但不能返回False。

答案 2 :(得分:0)

这里最简单的选择是认识到你可以使用替代构造,例如ArrayList(或更好,List(of String))

这样,对象将动态增长,直到你加载了所有项目,并且可以将结果作为数组返回

下面有两个可能的选项(通用列表(Of x)是首选。

  Function ReadArray(ByVal dr As IDataReader) As String()
    Dim tempstorage As New List(Of String)
    While dr.Read()
      tempstorage.Add(dr(0))
    End While

    Return tempstorage.ToArray()
  End Function

-

  Function ReadArray2(ByVal dr As IDataReader) As String()
    Dim tempstorage As New ArrayList()
    While dr.Read()
      tempstorage.Add(dr(0))
    End While

    Return tempstorage.ToArray(GetType(String))
  End Function

-

注意:我添加了一些额外的代码(假设dr是一个DataReader,并且你将其称为函数