使用 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中文網其他相關文章!