Rumah >pembangunan bahagian belakang >C++ >Adakah `ToList()` C# Mencipta Senarai Baharu Rujukan atau Salinan Elemen?

Adakah `ToList()` C# Mencipta Senarai Baharu Rujukan atau Salinan Elemen?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-02 19:05:39762semak imbas

Does C#'s `ToList()` Create a New List of References or Copies of Elements?

Adakah ToList() Mencipta Senarai Baharu?

Dalam C#, kaedah ToList() mengembalikan senarai baharu yang mengandungi elemen daripada koleksi asal. Walau bagaimanapun, persoalan timbul, adakah ia mencipta senarai rujukan atau salinan baharu elemen?

Pertimbangkan contoh berikut:

public class MyObject
{
    public int SimpleInt { get; set; }
}

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

Dalam senario ini, ToList() mencipta yang baharu senarai rujukan kepada objek yang sama seperti senarai asal. Ini kerana MyObject ialah jenis rujukan, bermakna ia menyimpan alamat objek dalam ingatan.

Apabila sifat SimpleInt objek yang dirujuk dalam senarai baharu ditukar, perubahan itu merambat kembali ke objek yang setara dalam senarai asal. Ini kerana kedua-dua senarai baharu dan senarai asal merujuk objek yang sama.

Jika MyObject diisytiharkan sebagai struct dan bukannya kelas, kaedah ToList() akan mencipta senarai baharu dengan salinan elemen daripada senarai asal. Dalam kes ini, perubahan yang dibuat kepada elemen dalam senarai baharu tidak akan menjejaskan elemen yang sepadan dalam senarai asal.

Atas ialah kandungan terperinci Adakah `ToList()` C# Mencipta Senarai Baharu Rujukan atau Salinan Elemen?. 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