首页 >后端开发 >C++ >C# 的 ToList() 是否创建列表元素的深拷贝或浅拷贝?

C# 的 ToList() 是否创建列表元素的深拷贝或浅拷贝?

DDD
DDD原创
2025-01-04 00:28:39697浏览

Does C#'s ToList() Create a Deep Copy or a Shallow Copy of the List's Elements?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn