Rumah > pembangunan bahagian belakang > C++ > Adakah `ToList()` Mencipta Salinan Dalam atau Hanya Salinan Cetek Senarai?

Adakah `ToList()` Mencipta Salinan Dalam atau Hanya Salinan Cetek Senarai?

Mary-Kate Olsen
Lepaskan: 2024-12-30 08:56:13
asal
978 orang telah melayarinya

Does `ToList()` Create a Deep Copy or Just a Shallow Copy of a List?

Adakah ToList() Mencipta Senarai Baharu?

Apabila menggunakan kaedah ToList(), seseorang mungkin tertanya-tanya tentang kesannya pada senarai objek sedia ada. Artikel ini menyelidiki kelakuan ToList() dan implikasinya terhadap kebolehubahan objek.

Pertimbangkan kod berikut:

public void RunChangeList()
{
    var objs = new List<MyObject>(){ new MyObject() { SimpleInt = 0 } };
    var whatInt = ChangeToList(objs);
}

public int ChangeToList(List<MyObject> objects)
{
    var objectList = objects.ToList();
    objectList[0].SimpleInt = 5;
    return objects[0].SimpleInt;
}
Salin selepas log masuk

Apabila ToList() digunakan, ia mencipta senarai baharu yang mengandungi rujukan kepada objek asal. Untuk memahami perkara ini, adalah penting untuk mengetahui bahawa senarai asal (objs) memegang rujukan kepada contoh kelas MyObject. ToList() tidak menyalin objek itu sendiri; sebaliknya, ia mereplikasi koleksi rujukan. Ini bermakna bahawa sebarang pengubahsuaian yang dibuat pada objek dalam senarai baharu akan ditunjukkan dalam senarai asal kerana kedua-duanya merujuk objek asas yang sama.

Dalam kod yang disediakan, menukar sifat SimpleInt objek dalam senarai objectList juga akan mengubah suai objek yang sepadan dalam senarai objs. Ini berlaku kerana kedua-dua senarai menunjuk kepada contoh MyObject yang sama. Akibatnya, kaedah ChangeToList akan mengembalikan 5, menunjukkan nilai sifat SimpleInt yang dikemas kini.

Walau bagaimanapun, jika kelas MyObject diisytiharkan sebagai struct dan bukannya kelas, ToList() akan mencipta senarai baharu yang mengandungi salinan daripada objek dalam senarai asal. Dalam senario ini, mengubah suai objek dalam senarai baharu tidak akan menjejaskan senarai asal, mengekalkan kebolehubahannya.

Atas ialah kandungan terperinci Adakah `ToList()` Mencipta Salinan Dalam atau Hanya Salinan Cetek Senarai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan