2013-04-22 44 views
6

假设我有一个名为PeopleCollection的List<Person>类型变量LINQ是否会返回一个集合的深层副本?

在下面的语句中,newPeople会获得PeopleCollection的深层副本吗?

var newPeople=(from p in PeopleCollection select p).ToList(); 

任何对newPeople的操作都会影响PeopleCollection?

+5

请注意,select不会产生任何效果,您可以只说'PeopleCollection.ToList()'。 – Servy 2013-04-22 19:05:14

+1

为什么问你什么时候可以写一个单行的文件,告诉你到底发生了什么? http://ideone.com/IJkfyG – Jon 2013-04-22 19:12:18

+0

@Jon这是正确的,他可以检查自我,但这几乎是所有问题在这里...... – 2014-11-06 11:08:17

回答

10

这将创建一个新列表并将列表中的所有项目添加到新列表中。它将执行所有这些项目的“浅层”副本,因此如果这些项目是可变参考类型,则将它们从变异中反映出来。

这意味着对任何一个列表本身(添加项目,删除项目等)的更改都不会反映在其他列表中,即使列表中的任何项目的突变都会反映在任一个集合中。

(所以,一句话,没有,也不会。)

+0

因此,如果我修改newPeople中的对象的属性,这可能会影响PeopleCollection变量? – developer747 2013-04-22 19:06:25

+1

@ developer747好吧,从技术上说不,你不会修改'PeopleCollection' *变量*。该变量只是对列表的引用,而该列表仅仅是对人们的引用。更改无论您使用哪个列表查找某个人并不重要,也不会因调用“ToList”而创建新人。 – Servy 2013-04-22 19:08:15

3

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

相关问题