这是我的代码c#
List<Element> TMPElementsX = new List<Element>();
TMPElementsX = TMPElements;
ResultsElements.Add(TMPElementsX);
Element ee = element;
TMPElements.Remove(ee);
当我删除ee时,它也会将其从其他集合{TMPElementsX}中删除,如何在 TMPElementsX 中保留ee的副本。 我需要在另一个临时集合中保留ee对象的副本,该集合是 TMPElementsX
答案 0 :(得分:1)
答案 1 :(得分:1)
执行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上阅读一些文章,以了解如何制作深层副本:
How do I clone a generic list in C#?
Generic method to create deep copy of all elements in a collection
在某些情况下,制作深层副本可能是一个糟糕的选择。它是一种黑客攻击,但不是解决方案。也许,你可以在没有它的情况下改变你的架构和逻辑。