VB.NET 学習58日目という初学者です。
未だ、Sub Main() でシコシコと基本事項の確認中です。
やっと構造体の演習を昨日から。
案の定、わからないことに遭遇しました。
' ==============================
' TEST1、TEST2 の BSave、BLoad
' ==============================
Module theTEST1
Sub Main()
' -----------------------
' TEST1 の BSave、BLoad
' -----------------------
Dim T1 As New TEST1
T1.Member1 = "T1.Member1"
T1.Member2 = "T1.Member2"
BSave(T1, "D:\Temp\T1.BIN")
T1.Member1 = "AAA"
T1.Member2 = "BBB"
Debug.Print(T1.Member1)
Debug.Print(T1.Member2)
T1 = CType(BLoad("D:\Temp\T3.BIN"), TEST1)
If T1.Member1 <> Nothing Then ' Null エラーが回避できない!
Debug.Print(T1.Member1)
Debug.Print(T1.Member2)
Else
Message("")
End If
' -----------------------
' TEST2 の BSave、BLoad
' -----------------------
Dim T2 As TEST2
T2.Member1 = "T2.Member1"
T2.Member2 = "T2.Member2"
BSave(T2, "D:\Temp\T2.BIN")
T2.Member1 = "AAA"
T2.Member2 = "BBB"
Debug.Print(T2.Member1)
Debug.Print(T2.Member2)
T2 = CType(BLoad("D:\Temp\T3.BIN"), TEST2)
If T2.Member1 <> Nothing Then
Debug.Print(T2.Member1)
Debug.Print(T2.Member2)
Else
Message("")
End If
End Sub
End Module
Function BLoad(ByVal aPath As String) As Object
If File.Exists(aPath) Then
Try
Using fs As New FileStream(aPath, FileMode.Open, FileAccess.Read)
Dim bf As New BinaryFormatter
Dim aObject As Object = bf.Deserialize(fs)
fs.Close()
Return aObject
End Using
Catch ex As IOException
MsgBox(ex.Message & "(BLoad)", , "エラー:")
Return Nothing
End Try
Else
Return Nothing
End If
End Function
T1 はクラスライブラリで定義。
T2 は構造体。
構造体の場合は、Nothing でチェックできました。
しかし、クラスライブラリの場合はチェックできません。
このエラーの考え方と処し方を教えてください。
構造体とクラスライブラリは表向きは同じようなもの。
ですから、どちらにも通用する BSave、BLoad 関数を作成使用としたわけです。
宜しくお願いします。
お礼
侍ジャパンを見ながら BLOAD、BSAVE を作成。 「NULL だから ISNOT NULL の要領かなー?」と思いましたが・・・。 結局は、悉く失敗。 回答の如くで成功しました。 >BLoadやBSaveを TEST1クラスの Sharedメソッドとして実装したほうがいいかもしれませんよ! クラスライブラリは12、3年前に一度だけ作ったことがあるだけ。 で、構造体=>ファイルアクセス=>クラスライブラリと攻める予定です。 が、構造体とクラスとが余りにも表向きが一緒なものでチト踏み込んだ次第です。 アドバイスの<Sharedメソッドとして実装>の意味は皆目わかりませんが是非に挑戦したいと思います。