在向列表添加内容时获取NullReferenceException

时间:2012-08-03 17:56:52

标签: vb.net nullreferenceexception

当我尝试使用我正在处理的这个Web服务时,我得到一个空引用异常。我在对象ipadarticle中有两个字段,名为fullname和tags,它们被声明为列表,因此ipadarticle可以返回多个标签和作者。空引用异常指向

ipadarticle2.FullName.Add(a_var.firstname + " " + a_var.lastname)
ipadarticle2.Tag.Add(a_var.tagtext)

我对vb编程很新,所以我不确定是什么导致了这一点。为了澄清,正在发生的事情是这个存储过程是从db中获取条目,db包含一些文章列表,其中包括其他东西 - 标签和与之关联的作者。由于文章有多个标签和作者,因此每篇文章都有多个条目。当我在Web服务中返回信息时,我正在尝试将其设置为只有一个ipadarticle对象被返回到达文章,然后它包含与每篇文章相关联的多个标签和作者的列表。我正在努力解决这个问题。

            Dim lq As New lqDFDataContext
            Dim var = lq.mobile_IpadGetSavedArticlesAR(simpuser.UserID, tempParamKW(0), tempParamKW(1), tempParamKW(2), tempParamKW(3), tempParamKW(4), pageNum, pageLen)
            Dim ipadarticle2 As New ipadArticle()

        For Each a_var In var



            If a_var.articleID <> temp Then

                If flag = 0 Then
                    result.add(ipadarticle2)
                    Dim ipadarticle1 As New ipadArticle()
                    ipadarticle2 = ipadarticle1
                End If

                ipadarticle2.ArticleID = a_var.articleID
                ipadarticle2.PublishedOn = a_var.publicationdate
                ipadarticle2.Title = a_var.title
                ipadarticle2.MedAbbr = a_var.medabbr.Replace(" ", "-").ToLower()
                ipadarticle2.FullName.Add(a_var.firstname + " " + a_var.lastname)
                ipadarticle2.Tag.Add(a_var.tagtext)

                flag = 1

            Else
                ipadarticle2.Tag.Add(a_var.tagtext)
                ipadarticle2.FullName.Add(a_var.firstname + " " + a_var.lastname)
                flag = 0
            End If

            temp = a_var.articleID

        Next
    End If
    Return result

ipadArticle类:

Imports Microsoft.VisualBasic

Public Class ipadArticle
    Inherits SimpleObject

    Public Sub New()

    End Sub



    Private _ArticleID As Integer
    Public Property ArticleID() As Integer
        Get
            Return _ArticleID
        End Get
        Set(ByVal value As Integer)
            _ArticleID = value
        End Set
    End Property


    Private _Title As String
    Public Property Title() As String
        Get
            Return _Title
        End Get
        Set(ByVal value As String)
            _Title = value
        End Set
    End Property
    Private _PublishedOn As String
    Public Property PublishedOn() As String
        Get
            Return _PublishedOn
        End Get
        Set(ByVal value As String)
            _PublishedOn = value
        End Set
    End Property


    Private _MedAbbr As String
    Public Property MedAbbr() As String
        Get
            Return _MedAbbr
        End Get
        Set(ByVal value As String)
            _MedAbbr = value
        End Set
    End Property

    Private _Tag As List(Of String)
    Public Property Tag() As List(Of String)
        Get
            Return _Tag
        End Get
        Set(ByVal value As List(Of String))
            _Tag = value
        End Set
    End Property

    Private _FullName As List(Of String)
    Public Property FullName() As List(Of String)
        Get
            Return _FullName
        End Get
        Set(ByVal value As List(Of String))
            _FullName = value
        End Set
    End Property


End Class

1 个答案:

答案 0 :(得分:1)

最可能的原因是ipadarticle2中尚未创建对象FullName和Tag(Nothing)。这些应该很可能在类构造函数中创建为新对象。

编辑:

根据发布的类,上述假设是正确的:FullName和Tag定义为List(Of String),但从不创建支持成员。

这可以通过以下两种方式解决:

1)直接在其定义中实例化后备成员变量,即:

Private _FullName As New List(Of String)

2)在构造函数中实例化后备成员变量:

Public Sub New()
  _FullName = New List(Of String)
  _Tag = New List(Of String)
End Sub

3)如果没有任何内容,则在getter中实例化后备成员变量:

Public Property Tag()As List(Of String)         得到             如果_Tag什么都没有                 _Tag =新列表(字符串)             万一             返回_Tag         结束获取

基本上,除了简单数据类型之外的任何变量类型必须先实例化才能使用它们(除非你测试它们是否为Nothingness)。