• 締切済み

(VB2005) ArrayListへの実体(値型変数)格納について

先刻も質問させてもらい、redfox63さま、KGさまに 回答いただきありがとうございました。 ArrayListに参照型データが格納されているようであることが判明しました。 ではArrayListに値型(変数の実体)を格納するにはどうすればいいでしょうか? 【前提】 ・処理の中で構造体変数XXXが更新される。 ・XXX更新の都度、Undo用ArrayListのAListにXXXを保存する関数をコールする。 Dim XXX as New AAA Dim AList as NEW ArrayList  XXX <--- 処理の中で更新がかかるとともに、保存関数XXX_Updateをコールする。 Private Function XXX_Update( )  Dim XXX_Buf as AAA  XXX_Buf = NEW AAA  XXX_Buf = XXX …(1)  AList.Insert(0,XXX_Buf) …(2) End Function このような関数ではAListにXXXへの参照データが入ってしまい、 過去に保存したはずのItemすべてが現在のXXXになってしまいます。 ということはAListに格納されているデータはすべて 現在のXXXを参照するデータになっているということですね? AListにXXXの実体(値型)を格納するにはどうすればいいでしょうか? DirectCastが値型と参照型の変換という説明を見つけたので使ってみましたが、 うまくいきませんでした。  (1)⇒ XXX_Buf = DirectCast(XXX, AAA)  (2)⇒ AList.Insert(0,DirectCast(XXX_Buf,AAA)) 原因や解決法などおわかりの方いましたら、回答よろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

構造体AAAに コンストラクタNewを定義してみてはいかがでしょう structure AAA dim ValBBB as BBB Sub New( src as AAA)   ' ここでメンバーのコピーをする   ValBBB = src.ValBBB ENd Sub End Structure といった具合に定義しておいて dim bbb as New AAA( XXX ) Alist.Insert( 0, bbb ) といった具合にしてみましょう

すると、全ての回答が全文表示されます。

関連するQ&A