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

配列をXMLで保存

  • 題名: 配列をXMLで保存
  • 著者: 馬三郎
  • 日時: 2005/01/19 13:11:05
  • ID: 8532
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WinXP VB.NET]
分類:[.NET]

よろしくお願いします。
配列をXMLで保存したいと思ったのですが、
「System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。」
と表示され、うまくいきません。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim LastStartDay() As Class1
Dim LastEndDay() As Class1

LastStartDay(0).LastTimeStart = CDate(TextBox1.Text)
↑この時点で先ほどのエラーが表示されます。

LastEndDay(0).LastTimeEnd = CDate(TextBox2.Text)
Dim serializer1 As _
New System.Xml.Serialization.XmlSerializer( _
GetType(Class1()))
Dim fs1 As New IO.FileStream( _
"G:\test.xml", IO.FileMode.Create)
serializer1.Serialize(fs1, LastStartDay)
serializer1.Serialize(fs1, LastEndDay)
fs1.Close()

クラスの追加で
Public Class Class1
Public LastTimeStart, LastTimeEnd As Date
End Class
を追加してあります。
また、LastStartDay(0)とLastEndDay(0)の「0」の部分は、今回の処理は初期設定としているので、配列の1番最初に入れたいと思い「0」をいれました。
どのようにしたらエラーを回避できるのか教えてください。
お願いします。
じゃんぬねっと です。

■No8532に返信(馬三郎さんの記事)
> Dim LastStartDay() As Class1
> LastStartDay(0).LastTimeStart = CDate(TextBox1.Text)
これでは、出るのは当たり前なわけでして。(^-^;)

とりあえず、ReDim で再定義してちゃんと確保するか、
数が決まってるのならば、

Dim LastStartDay(10) As Class1

などして、配列の領域を確保してあげないと。

# あと、Class1 が Static なクラスでなければインスタンスも生成しないとダメですね。
レスありがとうございます。

アドバイスを元にもう少し頑張ってみようと思います。
またわからなくなったらよろしくお願いします。
エラーが出ないようになりました。

じゃんぬねっとさん、どうもありがとうございました。

Dim LastStartDay(1) As Class1
Dim LastEndDay(1) As Class1
dim i as interge

for i = 0 to 1
LastStartDay(i) As New Class1
LastEndDay(i) As New Class1
LastStartDay(i).LastTimeStart = CDate(TextBox1.Text)
LastEndDay(i).LastTimeEnd = CDate(TextBox2.Text)
next
  • 題名: Re[4]: 配列をXMLで保存
  • 著者: 馬三郎
  • 日時: 2005/01/20 13:28:31
  • ID: 8563
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No8562に返信(馬三郎さんの記事)
> エラーが出ないようになりました。
>
> じゃんぬねっとさん、どうもありがとうございました。
>
> Dim LastStartDay(1) As Class1
> Dim LastEndDay(1) As Class1
> dim i as interge
>
> for i = 0 to 1
> LastStartDay(i) As New Class1
> LastEndDay(i) As New Class1
> LastStartDay(i).LastTimeStart = CDate(TextBox1.Text)
> LastEndDay(i).LastTimeEnd = CDate(TextBox2.Text)
> next
>
解決済み!

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