2013-04-22 17 views
6

List<Person> tipLINQ, koleksiyonun bir kopyasını döndürüyor mu?

'un PeopleCollection adlı bir değişkene sahip olduğumu varsayalım, aşağıdaki ifadede, yeni insanlar PeopleCollection'ın derin bir kopyasını alacak mı?

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

Yeni İnsanlar için herhangi bir değişiklik, PeopleCollection'ı etkileyebilir mi?

+5

Seçimin hiçbir şey üretken olmadığına dikkat edin, sadece PeopleCollection.ToList() 'diyebilirsiniz. – Servy

+1

Niye tam olarak ne olduğunu söyleyen bir tek liner yazabilirsin? http://ideone.com/IJkfyG – Jon

+0

@Jon Kendini kontrol edebilir doğru, ama bu burada tüm sorular için neredeyse doğrudur ... –

cevap

10

Bu, yeni bir liste oluşturacak ve o listede bulunan tüm öğeleri yeni listeye ekleyecektir. Tüm bu öğelerin "sığ" bir kopyasını gerçekleştirecektir, bu nedenle bu öğeler mutasyona uğrayan mutasyona uğramış referans türleri varsa, her iki koleksiyondan da yansıtılacaktır.

Bu, listedeki herhangi bir öğeye yapılan mutasyonların her iki koleksiyondan da yansıtılmasına rağmen, listenin kendisi için (öğe ekleme, öğe kaldırma, vb.) Değişikliklerin diğer listeye yansıtılmayacağı anlamına gelir.

(Yani tek kelimeyle, hayır, olmaz.)

+0

Yeni insanlardaki bir nesnenin özelliklerini değiştirirseniz, bu PeopleCollection'ı etkileyebilir değişken? – developer747

+1

@ developer747 Teknik olarak hayır, 'PeopleCollection' * değişkenini * değiştirmiyorsunuz. Değişken, yalnızca bir listeye yapılan bir başvurudır ve bu liste, yalnızca bir grup referanstır. Değişen Bir kişiyi bulmak için hangi listeyi kullandığınız önemli değil, 'ToList' çağrısının sonucu olarak yaratılan yeni insanlar yok. – Servy

3

O Enumerable tarafından döndürülen aynı nesneler başvuran bir List döndürür.

İlgili konular