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中文网其他相关文章!