我知道这可能是一个愚蠢的问题,但这是一个非常重要的事情,所以我想确保我做得很好。这没关系吗?
Dim obj as MyObj
Dim objarr as New Arraylist
For x as Integer = 1 to 10
obj = New MyObj
obj.SomeValue = x
objarr.add(obj)
Next
数组是否包含所有单独的对象,还是它们都包含相同的对象?我是否通过使用相同的MyObj对象添加到列表中来犯错误? 感谢
答案 0 :(得分:2)
您通常在循环之外声明收集列表。我接受了它:
Dim objarr as New Generic.List(Of MyObj)
For x as Integer = 1 to 10
objarr.add(New MyObj With {.SomeValue = x})
Next
这是我用于测试目的的课程:
Private Class MyObj
Public Property SomeValue As Integer
End Class
答案 1 :(得分:1)
您只是重用MyObj变量 - 将其视为容器。每次你拨打这一行
obj = New MyObj
您正在创建MyObj的新instance
;因此,您的ArrayList将包含10个不同的MyObj实例。
答案 2 :(得分:1)
是的,您的代码可以正常运行。每次使用New
操作时,都会实例化(创建)一个新对象。因此,每次循环时,都会重新分配obj
变量以引用新对象。
但是,有一些事情可以改进你的代码。首先,您应该使用List(Of MyObj)
而不是ArrayList
。其次,如果你只是在循环中声明obj
变量,那就不那么容易混淆了,例如:
Dim objects As New List(Of MyObj)()
For x As Integer = 1 To 10
Dim obj As New MyObj()
obj.SomeValue = x
objects.Add(obj)
Next
答案 3 :(得分:0)
10个不同的对象:
Dim obj(9) as MyObj
Dim objarr New Generic.List(Of MyObj) 'As Neolisk Suggested in Original Post
For x as Integer = 0 to 9
obj(x).SomeValue = x
objarr.add(obj(x))
Next
同一个对象的10个不同实例:
'-------Your Code------
Dim obj as MyObj
Dim objarr as New Arraylist
For x as Integer = 1 to 10
obj = New MyObj
obj.SomeValue = x
objarr.add(obj)
Next