正确地将对象存储在数组中

时间:2013-03-13 20:00:02

标签: vb.net

我知道这可能是一个愚蠢的问题,但这是一个非常重要的事情,所以我想确保我做得很好。这没关系吗?

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对象添加到列表中来犯错误? 感谢

4 个答案:

答案 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