2013-04-22 40 views
6

Supponiamo che io sono una variabile denominata PeopleCollection del List<Person> tipoLINQ restituisce una copia profonda di una raccolta?

Nella dichiarazione di seguito, sarebbe NewPeople ottenere una copia completa di PeopleCollection?

Potrebbe qualche manipolazione a newPeople influenzare PeopleCollection?

+5

Si noti che la selezione non fa nulla di produttivo, si può semplicemente dire 'PeopleCollection.ToList()'. – Servy

+1

Perché chiedere quando puoi scrivere un one-liner che ti dice esattamente cosa succede? http://ideone.com/IJkfyG – Jon

+0

@Jon È giusto che lui possa controllare se stesso, ma questo è quasi vero per tutte le domande qui ... –

risposta

10

Ciò creerà una nuova lista e aggiungerà tutti gli elementi che erano in quella lista alla nuova lista. Eseguirà una copia "superficiale" di tutti quegli elementi, quindi se tali elementi sono tipi di riferimento modificabili, questi verranno riflessi da entrambe le raccolte.

Ciò significa che le modifiche a entrambi gli elenchi (aggiunta di elementi, rimozione di elementi, ecc.) Non si rifletteranno nell'altro elenco, anche se le mutazioni apportate a qualsiasi elemento nell'elenco verranno riflesse da entrambe le raccolte.

(Così in una parola, no, non lo farà.)

+0

SO se modifico le proprietà di un oggetto in newPeople, ciò potrebbe influire su PeopleCollection variabile? – developer747

+1

@ developer747 Beh, tecnicamente no, non stai modificando la variabile 'PeopleCollection' * *. La variabile è solo un riferimento a una lista e quella lista è solo un insieme di riferimenti alle persone. Cambiare Non importa quale lista si usa per trovare una persona, non ci sono nuove persone create come risultato della chiamata a 'ToList'. – Servy

3

restituisce un List che fa riferimento agli stessi oggetti restituiti dal Enumerable.

Problemi correlati