首頁 > 後端開發 > C++ > `ToList()` 是建立清單的深拷貝還是淺拷貝?

`ToList()` 是建立清單的深拷貝還是淺拷貝?

Mary-Kate Olsen
發布: 2024-12-30 08:56:13
原創
979 人瀏覽過

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

ToList() 是否建立新清單?

使用 ToList() 方法時,人們可能想知道它對現有物件清單的影響。本文深入探討了 ToList() 的行為及其對物件不變性的影響。

考慮以下程式碼:

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;
}
登入後複製

當呼叫 ToList() 時,它會建立一個新清單包含對原始物件的參考。要理解這一點,重要的是要認識到原始清單 (objs) 保存對 MyObject 類別實例的參考。 ToList() 不複製物件本身;相反,它複製引用的集合。這意味著對新清單中的物件所做的任何修改都會反映在原始清單中,因為它們都引用相同的底層物件。

在提供的程式碼中,變更 objectList 清單中物件的 SimpleInt 屬性也會修改objs清單中對應的物件。發生這種情況是因為兩個清單都指向 MyObject 的相同實例。結果,ChangeToList 方法將傳回 5,表示更新後的 SimpleInt 屬性值。

但是,如果 MyObject 類別被宣告為結構體而不是類,則 ToList() 將建立一個包含副本的新清單原始清單中的物件。在這種情況下,修改新列表中的物件不會影響原始列表,保留其不變性。

以上是`ToList()` 是建立清單的深拷貝還是淺拷貝?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板