【发布时间】:2021-07-15 08:59:00
【问题描述】:
我想为撤消/重做制作备份列表, 但是在我修改了原始列表中的对象后,备份列表中的对象会发生变化。 我该如何处理这个问题? "const", "in" 似乎不起作用。
private List<GeminiFileStruct> BackUpForUndoRedo(List<GeminiFileStruct> gfl,
ToolStripMenuItem tm)
{
var li =
(from i in gfl
select i).ToList();
tm.Enabled = true;
return li;
}
对不起,它曾经是结构。出了点问题,我换班了。 struct 可以有 Get/Set 吗??? 熟悉 C#。
【问题讨论】:
-
如果备份列表中的项目在原始列表发生更改时被修改,这表明
GeminiFileStruct的命名非常糟糕,实际上是引用类型(类),而不是结构.这反过来意味着两个列表当前都包含对同一组对象的引用,而不是不同的对象。 -
你不需要
var li = (from i in gfl select i).ToList();- 你可以简单地写var li = gfl.ToList();。请根据 Damien 的评论提供GeminiFileStruct的定义。 -
@Damien_The_Unbeliever 对不起,它曾经是 struct。出了点问题,我换班了。
-
@Llama 当我阅读 OP 的问题时,需要的是原始项目的克隆列表(他想更改备份列表中的项目而不影响原始列表中的项目)。这是深拷贝与浅拷贝的例子。
-
@BernoulliIT Here is an example for your own leanring。请注意
struct的行为方式与引用类型的行为方式?请注意如何使用 struct 开箱即用地获取深层副本?