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