vb.net - vb.net 复制结构不是地址
问题描述
我正在尝试将数据从结构复制到临时结构,以便如果用户单击取消按钮,我没有修改原始数据。似乎 = 将地址分配给新结构,而不是简单地复制数据。如果他们点击保存按钮,那么我想将修改后的结构复制到工作结构中,如果他们点击取消,那么我只需破坏临时结构。
发生的情况是,我在临时结构中所做的任何更改都会反映在工作结构中。我如何将这些分开,而不必自己复制结构的每个元素?
注意: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
解决方案
尝试在新的控制台应用程序项目中运行此代码,您将看到结构(值类型)的行为如您所愿,而类(引用类型)则不需要,而是需要您自己创建一个副本:
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
该代码将显示(值类型)和(克隆的引用类型)的Text
属性没有被修改,而(引用类型)的属性被修改。t1A
t3A
t2A
推荐阅读
- c# - 循环遍历用于 AutoSpawn 的 Unity GameObjects 数组
- javascript - 无法在 HTMLDivElement.menuBtn.onclick 处设置属性 src 为 null
- c++ - 将相同的参数转发给 C++ 中的可变元组构造函数
- symfony - 在 NelmioApiDocBundle 中向 Swagger 添加身份验证文档
- mysql - 电影资料库多种类型
- email - Postfix + dovecot:无法接收来自某些域/服务器的电子邮件
- python - 如何使用 pip3 在 linux 上卸载软件包?
- cypress - 如何使用 cypress 中的 first() 和 last() 函数单击下一个元素?
- python - Python tkinter:通过单击按钮将列表中的随机图像替换为另一个图像
- javascript - React Hook,来自不同 Axios 调用的对象数组