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!