在 vb.net 中使用 类 的问题

Problems using classes in vb.net

我正在使用 VS 2019 vb.net 实施创建 XML 文件以传输某些数据的过程。 为此,我按照 Microsoft 的建议构建了一系列 类。该过程编译正确,但在 运行 时间生成一个错误,如 'Object reference not set on an object instance.' 到行

FileAbaco.utenti(0).utente(0).strutture(0).struttura.Add(stra)

我不明白我哪里错了。预先感谢您提供的任何帮助。

Dim FileAbaco As New dichiarazioni
        FileAbaco.comune = "I608"
        Dim uti As New utenti
        FileAbaco.utenti.Add(uti)
        Dim ute As New utente
        FileAbaco.utenti(0).utente.Add(ute)
        Dim stre As New strutture
        FileAbaco.utenti(0).utente(0).strutture.Add(stre)
        Dim stra As New struttura
        FileAbaco.utenti(0).utente(0).strutture(0).struttura.Add(stra)
        Dim dr As DataRow
        dr = DTTrimestrale.Rows(0)
        With FileAbaco.utenti(0).utente(0)
            .auth = dr.Item("auth".ToString)
            .gest_codice_fiscale = dr.Item("gest_codice_fiscale")
            .codice_utente = dr.Item("codice_utente")
            .gest_cognome = dr.Item("gest_cognome")
            .gest_nome = ""
        End With

这些是 类:

Imports System.Xml.Serialization

Public Class dichiarazioni
    Public comune As String
    <XmlElement()>
    Public Property utenti As New List(Of utenti)
End Class

Public Class utenti
    <XmlElement()>
    Public Property utente As New List(Of utente)
End Class

Public Class utente
    Public Property auth As String
    Public Property gest_codice_fiscale As String
    Public Property codice_utente As String
    Public Property gest_cognome As String
    Public Property gest_nome As String
    Public Property strutture As New List(Of strutture)
    Public Sub New()

    End Sub

    Public Sub New(auth As String, gest_codice_fiscale As String, codice_utente As String, gest_cognome As String, gest_nome As String, strutture As strutture)
        Me.auth = auth
        Me.gest_codice_fiscale = gest_codice_fiscale
        Me.codice_utente = codice_utente
        Me.gest_cognome = gest_cognome
        Me.gest_nome = gest_nome
        Me.strutture.Add(strutture)
    End Sub
End Class
Public Class strutture
    <XmlElement()>
    Public Property struttura As List(Of struttura)
    Public Sub New()

    End Sub
    Public Sub New(struttura As struttura)
        Me.struttura.Add(struttura)
    End Sub
End Class
Public Class struttura
    <XmlElement()>
    Public Property ID_struttura As String
    Public Property insegna As String
    Public Sub New()

    End Sub
    Public Sub New(ID_struttura As String, insegna As String)
        Me.ID_struttura = ID_struttura
        Me.insegna = insegna
    End Sub
End Class

显然是正确的,因为您必须初始化 struttura,因为它总是 Nothing

按如下方式更改此类:

Public Class strutture
    <XmlElement()>
    Public Property struttura As List(Of struttura)
    Public Sub New()
        If Me.struttura Is Nothing Then Me.struttura = New List(Of struttura)
    End Sub
    Public Sub New(struttura As struttura)
        If Me.struttura Is Nothing Then Me.struttura = New List(Of struttura)
        Me.struttura.Add(struttura)
    End Sub
End Class

Otherwise: 否则按上面的方法做(在上面的类中)

Public Property whatEver As New List(Of Whatever)