为啥我在 List<List<T>> 中复制 List<T> 时存在依赖关系? [复制]
Posted
技术标签:
【中文标题】为啥我在 List<List<T>> 中复制 List<T> 时存在依赖关系? [复制]【英文标题】:Why there is dependencies when i copy a List<T> in a List<List<T>>? [duplicate]为什么我在 List<List<T>> 中复制 List<T> 时存在依赖关系? [复制] 【发布时间】:2017-04-19 22:49:57 【问题描述】:我正在使用对象列表创建一个小 C# 应用程序,我有一个非常菜鸟的问题:
首先我填充我的对象 'A' ,然后我添加到名为 'lstA' 的列表中:
List<List<A>> Lst_LstA = new List<List<A>>(); // List of List<A>
List<A> lstA = new List<A>(); // List of my object <A>
A myA = new A();
A.xxx = xx;
A.yyy = yy;
lstA.Add(A);
Lst_LstA.Add(lstA);
lstA.Clear();
我的问题是什么?非常简单:当我调用 lstA.Clear() 时,它会清除我的 lstA 列表,完美,但是......它也清除了我的 lst_LstA 列表。
我需要清除 lstA 列表,但只有这些列表。
为什么 Clear() 也修改了其他列表?如何简单地解决这个问题?
非常感谢,
最好的问候,
【问题讨论】:
这是因为List<>
是一个引用类型...如果要添加为新List,请使用.Add(new List<>(a)
。或使用.ToList()
谢谢@TripleEEE 没关系 :)
【参考方案1】:
问题在于,当您将 lstA 添加到 lst_lstA 时,您是通过引用添加 - 即您只是添加指向列表的指针。
唯一可行的方法是将 lstA 的副本添加到 lst_lstA
【讨论】:
完美!我做了 .Add(new List(a) 没关系!非常感谢! @WalterFabiosimoni 没问题 :) 不要忘记在几个小时后将其标记为答案,当它允许您时以上是关于为啥我在 List<List<T>> 中复制 List<T> 时存在依赖关系? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 List<T> 的“索引超出范围”异常,但数组却没有?
为啥 std::min(std::initializer_list<T>) 按值接受参数?
为啥 C# 数组对 Enumeration 使用引用类型,而 List<T> 使用可变结构?