【问题标题】:Null reference but it's not?空引用,但它不是?
【发布时间】:2010-06-02 17:10:16
【问题描述】:

这与my previous question 有关,但它是一个不同的问题。

我有两个类:Server 和 Database。

Public Class Server

Private _name As String
Public Property Name() As String
    Get
        Return _name
    End Get
    Set(ByVal value As String)
        _name = value
    End Set
End Property


Private _databases As List(Of Database)
Public Property Databases() As List(Of Database)
    Get
        Return _databases
    End Get
    Set(ByVal value As List(Of Database))
        _databases = value
    End Set
End Property


Public Sub LoadTables()
    Dim db As New Database(Me)
    db.Name = "test"

    Databases.Add(db)

End Sub
End Class

Public Class Database
Private _server As Server

Private _name As String
Public Property Name() As String
    Get
        Return _name
    End Get
    Set(ByVal value As String)
        _name = value
    End Set
End Property


Public Property Server() As Server
    Get
        Return _server
    End Get
    Set(ByVal value As Server)
        _server = value
    End Set
End Property


Public Sub New(ByVal ser As Server)
    Server = ser
End Sub
End Class

相当简单。我是这样使用的:

Dim s As New Server
    s.Name = "Test"
    s.LoadTables()

问题出在 Server 类的 LoadTables 中。当它点击 Databases.Add(db) 时,它给了我一个 NullReference 错误(未设置对象引用)。我不明白它是如何得到的,所有的对象都设置好了。有任何想法吗?谢谢。

【问题讨论】:

  • 谢谢大家!我完全错过了。

标签: .net vb.net nullreferenceexception


【解决方案1】:

Databases 为空。

改成

Private _databases As New List(Of Database)

【讨论】:

    【解决方案2】:

    您实际上并没有创建您尝试将对象添加到的列表。您只创建了属性并且它是支持属性。您需要实例化列表并分配它,通常在构造函数中或作为声明的一部分。

    Public Sub New()
       Databases = New List(Of Database)
    End Sub
    

    【讨论】:

      【解决方案3】:

      我看不到 _databases 私有字段的启动位置,因为它是一个空指针。

      【讨论】:

        【解决方案4】:

        仔细查看Databases 属性的代码

        Private _databases As List(Of Database)
        Public Property Databases() As List(Of Database)
            Get
                Return _databases
            End Get
            Set(ByVal value As List(Of Database))
                _databases = value
            End Set
        End Property
        

        这里的 getter 只返回字段 _databases。该字段已定义但从未初始化,因此它是 Null/Nothing。尝试将字段更改为

        Private _databases As New List(Of Database)
        

        【讨论】:

          猜你喜欢
          • 2013-10-27
          • 1970-01-01
          • 2015-05-05
          • 2019-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-01
          相关资源
          最近更新 更多