-1

私はいくつかのカスタム クラスを使用しており、ある関数でデータを書き込み、別の関数でデータを読み取る必要があります。そのために、XM ファイルを使用しています。

私の問題は、データを書き込むときです。

ここに私のコードがあります: Imports System.IO Imports System

Public Class MainForm

  Public Class MyClass
    Private _id As Integer
    Private _somestring As String
    Public Property Id() As Integer
        Get
            Return _id
        End Get
        Set(ByVal Value As Integer)
            _id = Value
        End Set
    End Property
    Public Property Somestring() As String
        Get
            Return _somestring
        End Get
        Set(ByVal Value As String)
            _somestring = Value
        End Set
    End Property
End Class

Private Sub mysub()
  Dim ListVar As New List(Of MyClass)

  ' code...code.....code....

   Dim newvar As New MyClass()
   console.writeline("==== within the loop ====")
   For i As Integer = 0 To 2
     newvar.Id = I
     newvar.Somestring = "hello - " & cstr(I)
     ListVar.add(newvar)
     console.writeline("listvar(" & i & ")=" & listvar(i).Id)
   Next
    console.writeline("==== outside the loop ====")
    console.writeline("listvar(0)=" & listvar(0).Id)
    console.writeline("listvar(1)=" & listvar(1).Id)
    console.writeline("listvar(2)=" & listvar(2).Id)
  End Sub
End Class

出力:

==== ループ内 ====

listvar(0)=0

listvar(1)=1

listvar(2)=2

==== ループの外 ====

listvar(0)=2

listvar(1)=2

listvar(2)=2

私は何か愚かなことをしているに違いありませんが、それが何であるかを理解するだけです....

4

1 に答える 1

1

これを行う:

   console.writeline("==== within the loop ====")
   For i As Integer = 0 To 2
     Dim newvar As New MyClass()
     newvar.Id = I
     newvar.Somestring = "hello - " & cstr(I)
     ListVar.add(newvar)
     console.writeline("listvar(" & i & ")=" & listvar(i).Id)
   Next

newvar同じインスタンスであり続けるため、List 内の 3 つの参照はすべて同じインスタンスを指し、その Id 値は For ループで最後に設定したものです。

于 2013-10-10T19:51:34.617 に答える