从集合中删除元素会导致从所有相关对象/集合中删除该元素
本文关键字:删除 元素 集合 对象 | 更新日期: 2023-09-27 18:02:03
这是我的代码c#
List<Element> TMPElementsX = new List<Element>();
TMPElementsX = TMPElements;
ResultsElements.Add(TMPElementsX);
Element ee = element;
TMPElements.Remove(ee);
当我删除ee时,它导致它也从其他集合{TMPElementsX}中删除,我如何在TMPElementsX中保留ee的副本?我需要在另一个临时集合TMPElementsX
问题是对象指向相同的内存位置,所以如果您从一个集合中删除它,将从另一个集合中删除。
您必须对集合进行深度复制(克隆)。
当您执行TMPElementsX = TMPElements;
时,您实际上分配了一个引用。
表示变量TMPElements
和TMPElementsX
都指向同一对象。使用这些变量删除一个对象将会影响这个对象。
如果您希望它是具有相同值的不同且独立的List
,那么您可以克隆您的List
。
如果您有值类型的List
(如int
, double
等),则会容易得多。应该是这样的:
List<int> TMPElementsX = new List<int>();
TMPElementsX = new List<int>(TMPElements); // new list created
ResultsElements.Add(TMPElementsX);
int ee = element;
TMPElements.Remove(ee);
但是,在引用类型的情况下,复制构造函数用相同的引用项创建新的列表。你需要做一个List的深度拷贝。你可以在StackOverflow上阅读一些文章来学习如何制作深度拷贝:
如何克隆c#中的泛型列表?
创建集合中所有元素的深度拷贝的泛型方法
在某些情况下,进行深度复制可能是一个糟糕的选择。这是一种hack,但不是解决方案。也许,您可以更改您的体系结构和逻辑以在没有它的情况下工作。