DOBON.NET DOBON.NETプログラミング掲示板過去ログ

arraylist の一時保存

環境/言語:[VB.NET]
分類:[.NET]

'いつも勉強させて頂いています。
'VBNetの初心者です。よろしくお願いします。

'arraylist のデータで処理し、処理が出来ない場合 元のarraylistに戻したい。
'その為に始めにarraylistの一時保存をしたいのですがその方法を教えて下さい。

Dim x As New ArrayList()
x.Add("abc")
x.Add(New String() {"abc", "def", "ghi"})

'このxを一時保存したいが次のようにしてもだめでした

Dim ha As ArrayList
ha = x.Clone '
Dim s() As String
s = DirectCast(ha.Item(1), String())
s(0) = "010" 'ha,x も書き換わっている (haだけ書き換わって欲しい)

'次のようにしてもだめでした
Dim ha1 As New ArrayList(x)
s = DirectCast(ha1.Item(1), String())
s(0) = "011" 'ha,ha1,x も書き換わっている (ha1だけ書き換わって欲しい)


'以上ですがよろしくおねがいします。
'現在は取り合えず x の各要素を全て文字変数に読み出し再度別ArrayListにAddしています。
■No4894に返信(平ちゃんさんの記事)
コピー処理を自前で作るのが面倒なら、
シリアライズして退避しておきデシリアライズして復元するという
方法もあります。

Imports System.Runtime.Serialization.Formatters.Binary

Dim x As New ArrayList
x.Add("abc")
x.Add(New String() {"abc", "def", "ghi"})

' MemoryStreamにシリアライズして退避
Dim mem As System.IO.MemoryStream = New System.IO.MemoryStream
Dim formatter As BinaryFormatter = New BinaryFormatter
formatter.Serialize(mem, x)

...

' MemoryStreamのストリーム位置を先頭に戻す
mem.Seek(0, IO.SeekOrigin.Begin)
' MemoryStreamからデシリアライズして復元
Dim x2 As ArrayList = formatter.Deserialize(mem)
' 使い終わったらMemoryStreamをクローズ
mem.Close()
  • 題名: Re[2]: arraylist の一時保存
  • 著者: 平ちゃん
  • 日時: 2004/07/16 20:08:12
  • ID: 4904
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No4896に返信(NowhereManさんの記事)
> ■No4894に返信(平ちゃんさんの記事)
> コピー処理を自前で作るのが面倒なら、
> シリアライズして退避しておきデシリアライズして復元するという
> 方法もあります。
>

有難うございます。
この方法ならすっきりしてますし、色々な場面で同様にして使えます。
私の現在の方法ではArraylistの内容で記述が変わりますので、気に食わなかった次第です。
この機会にシリアライズの勉強もします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板