【发布时间】:2013-09-05 18:45:01
【问题描述】:
当我设置一个新列表等于另一个列表时,它是将新列表设置为指向另一个列表的指针还是实际上创建了一个新列表?
例如,
是……
List<SomeType> newList = oldList;
...与...相同
List<SomeType> newList = new List<SomeType>();
newList.AddRange(oldList);
(oldList 也是 SomeType 的列表)?
【问题讨论】:
-
也很容易通过实验弄清楚...
-
是的,但是我在哪里可以找到以这种方式运行的所有数据类型的列表?我想这就是我更感兴趣的……
-
几乎所有 C#(或大多数语言)中的赋值都很浅。你问的是深拷贝。默认情况下这样做会大大减慢速度,并导致一些非常意外的行为。 (编辑:是的,C++ 中有很好的 ol' 复制构造函数,以及按值复制的参数传递,但我们不要把它复杂化)。
-
我对这个主题的先例回答stackoverflow.com/questions/18625553/…
-
@Alexandru 所有引用类型都以这种方式运行。赋值运算符复制所有值类型(以及它们各自的值,递归地,但复制值类型中包含的引用,而不是引用的对象)。