ToList():它會建立一個新清單嗎?
在 C# 中,ToList() 是建立新清單的方法現有清單中元素的副本。對於像類別這樣的引用類型,副本包含與原始物件相同的物件的參考。
考慮以下程式碼:
public class MyObject { public int SimpleInt { get; set; } } ... 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; }
在此程式碼中,ChangeToList 方法採用MyObject 物件的列表,並使用 ToList() 將其轉換為新列表。然後它修改新清單中第一個物件的 SimpleInt 屬性。
這裡要注意的關鍵點是 MyObject 是引用型別。因此,ToList() 操作會建立一個新列表,但新列表中的元素是對原始列表中相同物件的參考。因此,當新清單中引用的物件的 SimpleInt 屬性被修改時,該變更也會反映在原始清單中的對應物件中。這就是為什麼 RunChangeList() 方法的輸出將為 5,因為新清單中所做的修改會傳播到原始清單。
以上是C# 的 ToList() 是否建立清單元素的深拷貝或淺拷貝?的詳細內容。更多資訊請關注PHP中文網其他相關文章!