首页 > 后端开发 > C++ > `ToList()` 是创建列表的深拷贝还是浅拷贝?

`ToList()` 是创建列表的深拷贝还是浅拷贝?

Mary-Kate Olsen
发布: 2024-12-30 08:56:13
原创
978 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板