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

instanceMyObjの新しいものを作成しています。したがって、ArrayListにはMyObjの10個の異なるインスタンスが含まれます。

于 2013-03-13T20:02:58.033 に答える
1

はい、あなたのコードは正常に動作します。操作を使用するたびにNew、新しいオブジェクトをインスタンス化 (作成) します。したがって、ループを通過するたびに、obj変数は新しいオブジェクトを参照するように再割り当てされます。

ただし、コードについて改善できる点がいくつかあります。まず、List(Of MyObj)ではなくを使用する必要がありますArrayListobj次に、ループ内で変数を単純に宣言すると、混乱が少なくなります。たとえば、次のようになります。

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 に答える