vb.net 复制结构而不是地址

vb.net Copy Structure not Address

我正在尝试将数据从结构复制到临时结构,这样如果用户单击取消按钮,我就不会修改原始数据。看起来 = 正在将地址分配给新结构,而不是简单地复制数据。如果他们点击“保存”按钮,那么我想将修改后的结构复制到工作结构中,如果他们点击“取消”,那么我就简单地销毁临时结构。

我在临时结构中所做的任何更改都会反映在工作结构中。如何将它们分开,而不必单独复制结构的每个元素?

注意:OutputData是一个相同"SortKeysStruct"结构的数组。

谢谢!

    Dim TempOutput As new OutputDataStructure

Private Sub OutputDetailsForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    TempOutput = OutputData(ActivePanelIx)
End Sub

Private Sub SaveBtn_Click(sender As Object, e As EventArgs) Handles SaveBtn.Click
    OutputData(ActivePanelIx) = TempOutput

    Me.DialogResult = DialogResult.OK
    Me.Close()
End Sub

Private Sub CancelBtn_Click(sender As Object, e As EventArgs) Handles CancelBtn.Click
    OutputData(ActivePanelIx) = TempOutput

    Me.DialogResult = DialogResult.OK
    Me.Close()
End Sub

在新的控制台应用程序项目中尝试 运行 这段代码,您会看到结构(值类型)的行为符合您的要求,而 class(引用类型)则不是,而是需要你自己创建一个副本:

Module Module1

    Sub Main()
        Dim t1A As New Type1 With {.Text = "Initial"}
        Dim t2A As New Type2 With {.Text = "Initial"}
        Dim t3A As New Type3 With {.Text = "Initial"}

        Dim t1B = t1A
        Dim t2B = t2A
        Dim t3B = DirectCast(t3A.Clone(), Type3)

        t1B.Text = "Final"
        t2B.Text = "Final"
        t3B.Text = "Final"

        Console.WriteLine(t1A.Text)
        Console.WriteLine(t2A.Text)
        Console.WriteLine(t3A.Text)

        Console.ReadLine()
    End Sub

End Module

Public Structure Type1
    Public Property Text As string
End Structure


Public Class Type2
    Public Property Text As String
End Class


Public Class Type3
    Implements ICloneable

    Public Property Text As String

    Public Function Clone() As Object Implements ICloneable.Clone
        Return New Type3 With {.Text = Text}
    End Function

End Class

该代码将显示 t1A(值类型)和 t3A(克隆引用类型)的 Text 属性未被修改,而 t2A(参考类型)是。