Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何保存二维数组?_Vb.net - Fatal编程技术网

Vb.net 如何保存二维数组?

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

我正在制作一个“机器人战争”类型的代码,用户可以在其中创建、删除和搜索角色及其统计信息。当我创建一个角色时,我希望即使在程序关闭后也能使用该角色。有没有办法做到这一点?我现在只是在一个私有sub中声明数组:

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