如何保存对象的副本并在以后恢复它

时间:2012-05-12 13:04:15

标签: .net vb.net winforms

我有一个表单,其中包含一个ListView和按钮,用于添加/编辑/删除此列表中的项目。它有一个保存&取消按钮。按下取消按钮,我想还原当前表单中已完成的所有更改。因此,在加载表单时,我会保留原始列表的副本,如下所示。

backupMyListView = MyListView

在取消按钮代码中,我反其道而行之。

MyListView = refMyListView

发生的事情是,原始列表视图永远不会恢复,因为每次更新MyListView时,backupMyListView也会更新。

如何在按取消按钮时恢复原始ListView?

3 个答案:

答案 0 :(得分:2)

两个列表显然都引用了相同的列表。

您基本上需要克隆或复制对象:

Dim backupMyListView As New ListView
For Each lv As ListViewItem In MyListView.Items
  backupMyListView.Items.Add(lv.Clone)
Next

答案 1 :(得分:1)

您需要研究值类型和引用类型之间的区别。将变量设置为另一个变量的值时,如果该值是对象的值类型(TypeDef结构),则它仅复制数据。当值是对象的引用类型(类)时,它只是对同一对象进行另一个引用。因此,如果您创建一个新的ListView对象(引用类型)并为其设置两个不同的变量,它们都将指向同一个对象。通过一个变量进行的任何更改也会影响另一个变量。要制作数据副本,您需要使用克隆方法。

答案 2 :(得分:1)

喜欢这个:

Private List<ListViewItem> ListViewStore As New List<ListViewItem>;
Sub Backup()
    For Each ListViewItem LItem in MyListView.Items
        ListViewStore.Add(LItem.Clone)
    Next
End Sub