gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:49:04 25 4
gpt4 key购买 nike

我知道为什么会这样,但是有什么方法可以做到这一点而不必实现 ICloneable 或 Copy() 方法吗?最好是 .net 2.0,但如果需要,3.5 也可以。

本质上,我正在尝试实现一个撤消方法。在大多数情况下,我可以在 Undo() 中执行反向操作,但对于其他情况则不可能。

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

public MyClass(List<SelectedItems> selectedItems)
{
_selectedItems = new List<SelectedItems>(selectedItems);
_originalItems = ??
}

最佳答案

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

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

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

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

创建 Copy 后你可以写的方法

_originalItems = selectedItems.ConvertAll(o => o.Copy());

关于c# - 我将如何初始化这两个列表,以便修改一个不会修改另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com