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
Mary-Kate Olsenasal
2024-12-30 08:56:13983semak imbas

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;
}

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!

Kenyataan:
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