2

我知道这可能是一个愚蠢的问题,但这是一个非常重要的问题,所以我想确保我做得正确。这个可以吗?

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

4 回答 4

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
于 2013-03-13T20:10:18.470 回答
1

您只是在重用 MyObj 变量 - 将其视为一个容器。每次拨打此行

obj = New MyObj

您正在创建一个新instance的 MyObj;因此,您的 ArrayList 将包含 10 个不同的 MyObj 实例。

于 2013-03-13T20:02:58.033 回答
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
于 2013-03-13T22:29:06.777 回答
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
于 2013-03-13T20:33:11.640 回答