我的名单上发生了什么?

时间:2010-05-19 18:11:31

标签: c# list

为什么

List<Object> objectList; = some objects

List<Object> getList() 
{
  return objectList; //or return new List<Object>(objectList);
}

返回一个列表,其中包含所有引用原始列表项目的项目?

感谢。

4 个答案:

答案 0 :(得分:13)

在第一种情况下,您只需返回对列表的引用。

在第二种情况下(new List<Object>(list)),不复制对象:仅复制引用!您必须克隆集合中的每个项目以返回列表的深层副本。

编辑:

遍历整个列表并创建每个对象的副本并将它们放入新列表中。

请参阅this以创建自定义对象的深层副本。我建议不要使用接口ICloneable。做一些研究以了解原因。 :)

答案 1 :(得分:3)

这是一个参考

您将返回对ObjectList的引用。 :)

AboutTheConstructor:

来自MSDNList<(Of <(T>)>)(IEnumerable<(Of <(T>)>))初始化List&lt;(&lt;(T&gt;)&gt;)类的新实例,该类包含从指定集合中复制的元素,并且具有足够的容量来容纳复制的元素数量。

答案 2 :(得分:1)

基本上,因为List&lt;&gt;和Object是引用类型。如果你在C#中阅读参考/价值类型:http://msdn.microsoft.com/en-us/library/3ewxz6et(v=VS.100).aspx它应该对你有意义。

答案 3 :(得分:0)

如果您使用的是自定义对象,请在对象上实现ICloneable接口。

然后,当您返回列表时,将对象克隆到新列表中。当您将旧列表传递给新列表的构造函数时,您将传递对原始列表中所有对象的引用,除非它们是值类型(字符串,整数等)