为啥我在 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&lt;&gt;是一个引用类型...如果要添加为新List,请使用.Add(new List&lt;&gt;(a)。或使用.ToList() 谢谢@TripleEEE 没关系 :) 【参考方案1】:

问题在于,当您将 lstA 添加到 lst_lstA 时,您是通过引用添加 - 即您只是添加指向列表的指针。

唯一可行的方法是将 lstA 的副本添加到 lst_lstA

【讨论】:

完美!我做了 .Add(new List(a) 没关系!非常感谢! @WalterFabiosimoni 没问题 :) 不要忘记在几个小时后将其标记为答案,当它允许您时

以上是关于为啥我在 List<List<T>> 中复制 List<T> 时存在依赖关系? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 List<T>.ForEach 允许修改其列表?

为啥 List<T> 的“索引超出范围”异常,但数组却没有?

为啥 std::min(std::initializer_list<T>) 按值接受参数?

为啥 C# 数组对 Enumeration 使用引用类型,而 List<T> 使用可变结构?

为啥 WCF 会返回 myObject[] 而不是 List<T> 像我期望的那样?

为啥对 List<T> 的迭代没有从 SQL 视图中给我正确的值? [复制]