为什么
List<Object> objectList; = some objects
List<Object> getList()
{
return objectList; //or return new List<Object>(objectList);
}
返回一个列表,其中包含所有引用原始列表项目的项目?
感谢。
答案 0 :(得分:13)
在第一种情况下,您只需返回对列表的引用。
在第二种情况下(new List<Object>(list)
),不复制对象:仅复制引用!您必须克隆集合中的每个项目以返回列表的深层副本。
编辑:
遍历整个列表并创建每个对象的副本并将它们放入新列表中。
请参阅this以创建自定义对象的深层副本。我建议不要使用接口ICloneable
。做一些研究以了解原因。 :)
答案 1 :(得分:3)
您将返回对ObjectList的引用。 :)
来自MSDN:List<(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接口。
然后,当您返回列表时,将对象克隆到新列表中。当您将旧列表传递给新列表的构造函数时,您将传递对原始列表中所有对象的引用,除非它们是值类型(字符串,整数等)