1

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

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

我对 vb 编程很陌生,所以我不确定是什么原因造成的。为了澄清,发生了什么是这个存储过程正在从一个数据库中获取条目,该数据库有一个文章列表,其中包括与之相关的标签和作者。由于文章有多个标签和作者,因此每篇文章都有多个条目。当我在 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

ipad文章类:

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
4

1 回答 1

1

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

编辑:

根据发布的类,上述假设是正确的: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 中实例化支持成员变量:

公共属性 Tag() As List(Of String) Get If _Tag is nothing Then _Tag = New List(Of String) End If Return _Tag End Get

基本上,除了简单数据类型之外的任何变量类型都必须在它们可以使用之前被实例化(除非你测试它们的虚无)。

于 2012-08-03T18:21:20.930 回答