在外部构建 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
表示您正在尝试访问尚未实例化的对象上的 属性 或方法。您正在尝试访问 A
和 A.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的基础知识。
我在 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
表示您正在尝试访问尚未实例化的对象上的 属性 或方法。您正在尝试访问 A
和 A.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的基础知识。