在外部构建 ArrayList class - vb.net

Building an ArrayList in an external class - vb.net

我在 Class A 中定义了一个 ArrayList。然后我想在 Class B 中构建这个数组并在 Class A.

中使用它

我将 ArrayList 定义为:

Public arrayList As ArrayList

然后,在 Class B 我做:

Dim trLogkEmpty As New A
'Loop with strEspece definition
    trLogkEmpty.arrayList.Add(strEspece)
'End Loop

程序抛出这个错误:

NullReferenceException

不知道为什么,因为strEspece一直没有变成null(我测试过)。不知道还有没有别的原因。

此外,当我遍历 Class A 中的 arrayList 元素时,我再次得到 NullReferenceException。这是循环代码:

For Each logkNull In Me.arrayElemWithLogkEmpty
    Console.WriteLine(logkNull)
 Next

我不知道第一个异常发生了什么,但代码运行 "correctly"。在第二个异常中,我猜这就像我丢失了数组的元素值。我不知道如何解决它...任何帮助?我接受不同的解决方法!

你犯了两个同样的错误。 NullReferenceException 表示您正在尝试访问尚未实例化的对象上的 属性 或方法。您正在尝试访问 AA.arrayList 而没有先创建它们的新实例。

所以,不只是:

trLogkEmpty.arrayList.Add(strEspece)

你应该有:

Dim trLogkEmpty As New A()
trLogkEmpty.arrayList = New ArrayList()
trLogkEmpty.arrayList.Add(strEspece)

但是, 我必须坚持你要避免 ArrayList,并且你要避免实例化 class 的 public 成员在 class 之外。我建议使用强类型集合 class,例如 List(Of T),并在 A 中使用只读 属性 来处理其实例化和可见性,因此无法在 A:

之外修改集合(不是其内容)
Public Class A

    Private _myList As IList(Of String)

    Public ReadOnly Property MyList As IList(Of String)
        Get
            If _myList Is Nothing Then
                _myList = New List(Of String)
            End If
            Return _myList
        End Get
    End Property

End Class

现在你有:

Dim trLogkEmpty As New A()
trLogkEmpty.MyList.Add(strEspece)

您可能需要保留 A 的实例,因此 class B 可能看起来有点像:

Public Class B

    Private _a As A

    Public Sub New()
        _a = New A()
    End Sub

    ' ... your methods that use _a.MyList

End Class

我终于明白了。当我在 class 'A' 中初始化数组时,我忘记创建 ArrayList class 的实例,具体来说,我忘记把 New:

Public arrayElemWithLogkEmpty As New ArrayList

所以,部分地,@Blackwood 是对的!

谢谢大家,原谅我对vb.net的基础知识。