1

作業中のこのWebサービスを使用しようとすると、null参照例外が発生します。オブジェクトipadarticleにfullnameとtagsという2つのフィールドがあり、リストとして宣言されているため、ipadarticleは複数のタグと作成者を返すことができます。null参照例外は

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

私はvbプログラミングにかなり慣れていないので、これを引き起こしている原因がよくわかりません。明確にするために、何が起こっているのかというと、このストアドプロシージャは、dbからエントリをフェッチしています。dbには、タグと作成者が関連付けられた記事のリストがあります。記事には複数のタグと作成者がいるため、記事ごとに複数のエントリがあります。Webサービスで情報を返すとき、リーチ記事に対して1つの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
4

1 に答える 1

1

最も可能性の高い原因は、オブジェクトFullNameとTagがipadarticle2で作成されていない(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)何もない場合は、ゲッターでバッキングメンバー変数をインスタンス化します。

Public Property Tag()As List(Of String)Get If _Tag Is Nothing Then _Tag = New List(Of String)End If Return _Tag End Get

基本的に、単純なデータ型以外の変数型は、使用する前にインスタンス化する必要があります(Nothingnessをテストしない限り)。

于 2012-08-03T18:21:20.930 に答える