在 C# 中,当我将一个新列表设置为等于另一个列表时,它是将新列表设置为指向另一个列表的指针,还是实际上创建了一个新列表
本文关键字:列表 新列表 一个 另一个 设置 指针 实际上 创建 | 更新日期: 2023-09-27 18:30:15
当我将新列表设置为等于另一个列表时,它是将新列表设置为指向另一个列表的指针,还是实际上创建了一个新列表?
例如
是。。。
List<SomeType> newList = oldList;
。同...
List<SomeType> newList = new List<SomeType>();
newList.AddRange(oldList);
(旧列表也是某个类型的列表)?
将有一个List
和多个引用。这适用于所有引用类型(类)。
另一方面,值类型(结构)在分配时被复制。
赋值运算符不是克隆运算符。对于引用类型,它会复制引用的值。
在赋值中,例如:
List<SomeType> newList = oldList;
两个列表将完全相同,在列表中添加或删除一个项目将使它在另一个列表中更改。它们都在额外的指针旁边使用相同的内存空间。
List<SomeType> newList = new List<SomeType>();
newList.AddRange(oldList);
将是 2 个独立的独立列表(都在内存中)。一个列表中的更改不会影响另一个列表。
请记住,如果您的"某种类型"是复杂的类型...让我们说一个"产品"。在这两种情况下,所有列表都将引用您的产品,因此产品中的更改将在另一个列表中更改。
要使列表复制和产品,您需要克隆产品,这可能会很棘手,因为克隆是递归的,具体取决于类型的复杂性。