【发布时间】:2011-03-18 03:10:36
【问题描述】:
我在 C# 编程中遇到问题,需要帮助, 当我在 c# 中创建一个通用容器并在列表之外修改它的一个元素时,它也被修改了,而我想保持列表的元素原样
我已经搜索了容器范围或引用,但我什么也没找到 顺便说一句,我之前多次遇到过这个问题,我用复制构造函数解决了如下
List<Object> list=new List<Object>();
list.Add(new Object(object) );
但在这种情况下,我的解决方案无效
List<List<Object>> allObjects = new List<List<Object>>(1000);
List<Object> object = new List<Object>();
for (int i = 0; i < 1000; i++)
{
object = new List<Object>();
//some code here that fill object list
allObjects.Add(object);
}//after filling all the 1000 elements in allObjects list,all the elements of the //list are 1000 elements with the same value of the last object has been inserted
我的错误解决方案对问题没有影响
List<List<Object>> allObjects = new List<List<Object>>(1000);
List<Object> object = new List<Object>();
for (int i = 0; i < 1000; i++)
{
object = new List<Object>();
//some code here that fill object list
allObjects.Add(new List<Object>(object));
}
提前致谢
【问题讨论】:
-
您是否尝试复制对象列表而不保留原始对象引用,以便您可以编辑第二个列表(及其对象)而不影响第一个?
-
我认为用 new 创建一个新的对象列表就足够了,还有其他方法可以释放以前添加的对象列表引用吗,谢谢
-
我对你想要做什么感到有点困惑。代码看起来就像您正在创建一个空列表列表。我猜这不是你想要的。
-
我正在创建一个列表列表,让我们命名内部列表 list1 和更大的列表(列表列表) list2,在一个循环中,我试图用一些数据填充 list1,并在 1 的末尾循环我在list2中插入list1 ...我的问题是虽然我在循环的每个开始都创建了新的空list1,list2元素受到更改list1元素的影响,并且在1000个循环结束时我得到了list2,其中包含1000个元素1000 个相同的 list1(添加的最后一个)...希望我已经解释清楚了
标签: c# generics scope containers