2013-04-22 23 views
6

Giả sử tôi có một biến được gọi là PeopleCollection của List<Person> loạiLINQ có trả lại bản sao sâu của bộ sưu tập không?

Trong tuyên bố dưới đây, newPeople có nhận được bản sao sâu về PeopleCollection không?

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

Mọi thao tác với người mới có ảnh hưởng đến PeopleCollection không?

+5

Lưu ý rằng chọn không làm gì hiệu quả, bạn chỉ có thể nói 'PeopleCollection.ToList()'. – Servy

+1

Tại sao hỏi khi bạn có thể viết một lớp lót cho bạn biết chính xác điều gì sẽ xảy ra? http://ideone.com/IJkfyG – Jon

+0

@Jon Đúng là anh ta có thể tự kiểm tra, nhưng điều này gần như đúng đối với tất cả các câu hỏi ở đây ... –

Trả lời

10

Điều đó sẽ tạo danh sách mới và thêm tất cả các mục nằm trong danh sách đó vào danh sách mới. Nó sẽ thực hiện một bản sao "nông" của tất cả các mục đó, vì vậy nếu các mục đó là các loại tham chiếu có thể thay đổi đột biến chúng sẽ được phản ánh từ một trong hai bộ sưu tập.

Điều này có nghĩa là các thay đổi đối với chính danh sách (thêm mục, xóa mục, v.v.) sẽ không được phản ánh trong danh sách khác, mặc dù đột biến cho bất kỳ mục nào trong danh sách sẽ được phản ánh từ bộ sưu tập.

(Vì vậy, trong một từ, không, nó sẽ không.)

+0

SO nếu tôi sửa đổi các thuộc tính của một đối tượng trong newPeople, điều đó có thể ảnh hưởng đến PeopleCollection biến? – developer747

+1

@ developer747 Vâng, về mặt kỹ thuật, bạn không sửa đổi biến 'PeopleCollection' * *. Biến chỉ là một tham chiếu đến một danh sách và danh sách đó chỉ là một loạt các tham chiếu đến mọi người. Thay đổi Không quan trọng bạn sử dụng danh sách nào để tìm một người, không có người mới nào được tạo ra do cuộc gọi đến 'ToList'. – Servy

3

Nó trả về một List tham chiếu đến các đối tượng cùng được trả về bởi các Enumerable.

Các vấn đề liên quan