Vb.net 如何保存二维数组?
我正在制作一个“机器人战争”类型的代码,用户可以在其中创建、删除和搜索角色及其统计信息。当我创建一个角色时,我希望即使在程序关闭后也能使用该角色。有没有办法做到这一点?我现在只是在一个私有sub中声明数组:Vb.net 如何保存二维数组?,vb.net,Vb.net,我正在制作一个“机器人战争”类型的代码,用户可以在其中创建、删除和搜索角色及其统计信息。当我创建一个角色时,我希望即使在程序关闭后也能使用该角色。有没有办法做到这一点?我现在只是在一个私有sub中声明数组: Dim characters(10,4) As String 'name , attack , defense , health Private Sub ExtractInfo() characters(1, 1) = "Terminus" characters(1, 2
Dim characters(10,4) As String
'name , attack , defense , health
Private Sub ExtractInfo()
characters(1, 1) = "Terminus"
characters(1, 2) = "72"
characters(1, 3) = "14"
characters(1, 4) = "200"
characters(2, 1) = "Sir Kill-a-lot"
characters(2, 2) = "60"
characters(2, 3) = "30"
characters(2, 4) = "250"
但是,我希望保存此处的信息和添加的信息,以便在代码停止运行后使用。保存/加载二进制数据的一种方法是使用
序列化
对于非复杂的对象关系,它很容易实现
因此,基本上您可以创建一个类,并使用
属性对其进行修饰。
当您调用适当的BinaryFormatter.Serialize
或BinaryFormatter.Deserialize
方法时,所有(公共)成员都将被序列化/反序列化
例如:
<Serializable>
Public Class Characters
Public characters(10, 4) As String
Public Sub Save(path As String)
serialize(path)
End Sub
Public Shared Function Load(path As String) As Characters
Return deSerialize(path)
End Function
Private Sub serialize(path As String)
Try
Using fs As Stream = New FileStream(path, FileMode.OpenOrCreate)
Dim bf As New BinaryFormatter
bf.Serialize(fs, Me)
End Using
Catch ex As Exception
'Error handling
End Try
End Sub
Private Shared Function deSerialize(path As String) As Characters
Try
Using fs As Stream = New FileStream(path, FileMode.OpenOrCreate)
Dim bf As New BinaryFormatter
deSerialize = CType(bf.Deserialize(fs), Characters)
End Using
Return deSerialize
Catch ex As Exception
'Error handling
End Try
End Function
End Class
@muffi这个问题是关于VB.NET的,不是吗VBA@MatSnow这两种语言并不遥远。使用流而不是文件应该没有问题。@muffi不太远意味着它不一样。表示提议的问题不是重复的。@muffi我将查看此线程,如果我能让它工作,我可能会删除此线程。提议的重复几乎没有关系,除了标题和“VB”中的一些词。
Sub Main()
Dim a = New Characters()
a.characters(0, 0) = "Stack"
a.characters(0, 1) = "Overflow"
a.characters(1, 0) = "Is"
a.characters(1, 1) = "awesome!"
a.Save("E:\characters.sav")
Dim b = Characters.Load("E:\characters.sav")
Console.WriteLine(b.characters(0, 0))
'-> Stack
Console.ReadLine()
End Sub