|
■No97702 (ぴっぴ さん) に返信 > Dim dic As Dictionary(Of Integer, List(Of 自作クラス)) = New Dictionary(Of Integer, List(Of 自作クラス)) > というようにDictionaryを作成しました。 > dic.Add(i, lsttData)
たとえば、Dictionary(Of Integer, ListBox) を想像してみてください。 dic.Add(0, Me.ListBox1) dic.Add(1, Me.ListBox1) とした場合、ListBox1 という同一のインスタンスが Key 0 と Key 1 で共有されます。
この状態で、 dic(1).Items.Add("New Item") とすれば、Me.ListBox1 に対する操作となるわけですから、 dic(1).Items だけでなく dic(0).Items の件数も増加しますよね。
同一の List(Of ) インスタンスを登録していた場合も、それと同じ事が起きます。
『空の List(Of )』を追加することが目的なら、 dic.Add(i, New List(Of 自宅クラス)()) のように、新しいインスタンスを追加します。
『既存リストのコピー』を追加したい場合は、別インスタンスを生成するために、 dic.Add(i, lsttData.ToList()) とすることはできます。こうすることによって、 dic(1).Add 操作を行っても、dic(0) の件数が変化しなくなります。
また今回の場合、List(Of 自作構造体) ではなく List(Of 自作クラス) であるため、場合によっては、 List(Of ) の個々のメンバーに対しても複製が必要になる可能性があります。
たとえば List(Of FileStream) を管理していた場合、そのリストを複製するにあたり、 「同一のファイルストリームへの参照」 「同じファイルを共有アクセスで開いている別のストリーム」 「別フォルダの同名ファイルを開いているストリーム」 「同フォルダの別名ファイルを開いているストリーム」 など、どのような複製が必要とされるかは、ケースバイケースですよね。
|