我如何初始化这两个列表,以便修改一个不修改另一个?

Bra*_*don 2 c# .net-3.5 .net-2.0 winforms

我知道为什么会发生这种情况,但有没有办法在不必实现ICloneable或Copy()方法的情况下做到这一点?优选.net 2.0,但如果有必要,则3.5可以.

基本上我正在尝试实现撤消方法.在大多数情况下,我可以只执行相反的操作Undo(),但对于其他不可能的操作.

所以我想保留两个清单.一个用于我将要修改的项目列表,另一个用于原始未修改的项目列表.这样,如果我需要进行撤消,我只需删除已修改的项目并将其替换为原始项目.我试图分配_originalItems变量的大多数方法都不起作用,那么我需要做什么呢?

public MyClass(List<SelectedItems> selectedItems)
{
  _selectedItems = new List<SelectedItems>(selectedItems);
  _originalItems = ??
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

你可以简单地写new List<SelectedItems>(selectedItems)第二次.

这将创建一个引用相同实例的单独列表.

两个列表中都会看到对象的更改(因为它们是相同的实例); 对列表(例如Add())的更改不会.

如果要复制实例,则需要一个Copy()方法; .Net无法神奇地深层复制任意类型.

创建Copy方法后,您可以编写

_originalItems = selectedItems.ConvertAll(o => o.Copy());
Run Code Online (Sandbox Code Playgroud)