3 回答
TA贡献1880条经验 获得超4个赞
约翰已经评论了错误代码:
List<string> huh = new List<string>();
huh = wordlist;
在这里您创建一个新列表,然后将其丢弃并将您的参考附加huh到您的旧列表中,因此 huh 和 wordlist 都指的是同一件事..
我只是想指出复制列表的非 LINQ 方式:
List<string> huh = new List<string>(wordlist);
将旧列表传递给新列表的构造函数;list 有一个构造函数,它将对象集合存储在新列表中
您现在有两个列表,最初它们都引用相同的字符串,但由于字符串无法更改,如果您开始更改列表中的字符串(而不是仅仅将它们从列表中改组或删除),将创建新的
如果是一个有价值的观点;您将有 2 个指向相同对象的列表,因此如果您将来有相同的场景,其中的对象可以更改,并且您在一个列表中更改对象,它也会在另一个列表中更改:
//imagine the list stores people, the age of the first
//person in the list is 27, and we increment it
List1[0].PersonAge++;
//list2 is a different list but refers to the same people objects
//this will print 28
Console.Out.WriteLine(list2[0].PersonAge);
这就是我们所说的浅拷贝
TA贡献1874条经验 获得超12个赞
您的问题来自这样一个事实,即在 C# 中我们有引用类型和值类型。
值类型可以通过直接赋值运算符 ( =
) 进行赋值,但对于引用类型则不同。引用类型本身不存储实际数据,它们在内存中存储数据所在的位置。就像指针一样,如果你来自 C 世界。
看看IClonable
。另请阅读Jon Skeet 的参数传递,它很好地描述了值和引用类型。
- 3 回答
- 0 关注
- 123 浏览
添加回答
举报