假設我有一個名爲PeopleCollection的List<Person>
類型變量LINQ是否會返回一個集合的深層副本?
在下面的語句中,newPeople會獲得PeopleCollection的深層副本嗎?
var newPeople=(from p in PeopleCollection select p).ToList();
任何對newPeople的操作都會影響PeopleCollection?
假設我有一個名爲PeopleCollection的List<Person>
類型變量LINQ是否會返回一個集合的深層副本?
在下面的語句中,newPeople會獲得PeopleCollection的深層副本嗎?
var newPeople=(from p in PeopleCollection select p).ToList();
任何對newPeople的操作都會影響PeopleCollection?
這將創建一個新列表並將列表中的所有項目添加到新列表中。它將執行所有這些項目的「淺層」副本,因此如果這些項目是可變參考類型,則將它們從變異中反映出來。
這意味着對任何一個列表本身(添加項目,刪除項目等)的更改都不會反映在其他列表中,即使列表中的任何項目的突變都會反映在任一個集合中。
(所以,一句話,沒有,也不會。)
因此,如果我修改newPeople中的對象的屬性,這可能會影響PeopleCollection變量? – developer747 2013-04-22 19:06:25
@ developer747好吧,從技術上說不,你不會修改'PeopleCollection' *變量*。該變量只是對列表的引用,而該列表僅僅是對人們的引用。更改無論您使用哪個列表查找某個人並不重要,也不會因調用「ToList」而創建新人。 – Servy 2013-04-22 19:08:15
它返回一個List
引用由Enumerable
返回相同的對象。
請注意,select不會產生任何效果,您可以只說'PeopleCollection.ToList()'。 – Servy 2013-04-22 19:05:14
爲什麼問你什麼時候可以寫一個單行的文件,告訴你到底發生了什麼? http://ideone.com/IJkfyG – Jon 2013-04-22 19:12:18
@Jon這是正確的,他可以檢查自我,但這幾乎是所有問題在這裏...... – 2014-11-06 11:08:17