LINQ是否返回集合的深拷贝?

7
假设我有一个名为PeopleCollection的变量,类型为List 。在下面的语句中,newPeople会得到PeopleCollection的深拷贝吗?
var newPeople=(from p in PeopleCollection select p).ToList();

对 newPeople 进行任何操作会影响到 PeopleCollection 吗?


5
请注意,这个 select 没有实际作用,你只需使用 PeopleCollection.ToList() 即可。 - Servy
1
为什么要问,当你可以写一个一行代码告诉你发生了什么?http://ideone.com/IJkfyG - Jon
@Jon,他可以自己检查,但这几乎适用于这里的所有问题... - Anton Kalcik
2个回答

10

这将创建一个新列表并将原列表中的所有项目添加到新列表中。它将执行所有这些项的“浅”复制,因此如果这些项是可变引用类型,则对它们进行更改将从任何一个集合中反映出来。

这意味着更改列表本身 (添加项目、删除项目等) 将不会在另一个列表中反映出来,即使对列表中任何项的更改也将从任何一个集合中反映出来。

(所以简而言之,不会。)


如果我修改newPeople对象的属性,那么可能会影响到PeopleCollection变量吗? - developer747
1
@developer747 从技术上讲,你并没有修改 PeopleCollection 变量。该变量只是一个指向列表的引用,而该列表只是一堆人的引用。使用哪个列表查找人都无所谓,调用 ToList 不会创建新的人。 - Servy

3

它返回一个List,该列表引用由Enumerable返回的相同对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接