List <t> - 我是否传递对象或引用?</t>

时间:2011-01-19 21:45:48

标签: c# list generics

我已经研究过泛型并且有以下问题:

List<someClass> list=new List<someClass>

SomeClass MyInstance=SomeClass();

list.Add(MyInstance);

我不确定将添加到列表中的内容 - 引用类型的引用或对象(指向MyInstance的实际值)。
编辑:或者我会添加指向实际对象的值(即参考数据类型)?

由于

6 个答案:

答案 0 :(得分:20)

当您处理引用类型时,您始终处理引用,因此引用将添加到列表中(实际引用的副本)。你实际上没有选择;这就是语言的运作方式。

答案 1 :(得分:6)

假设someClass是引用类型(例如类)而不是值类型(例如struct),那么它是引用。

我也承认定义一个名为someClass

的结构会非常恶魔

struct someClass

这是关于参数传递的Jon Skeet文章的obligatory link

答案 2 :(得分:4)

由于someClass是引用类型,因此对MyInstance的引用将被复制到列表中。

答案 3 :(得分:1)

将添加引用,因为MyInstance是引用类型

答案 4 :(得分:-1)

列表将存储对象的引用而不是对象实例。

实际上,List存储值由use数组和数组存储在堆栈上的引用并将对象实例存储在堆上。

答案 5 :(得分:-1)

如果您将对象丢弃,请执行以下操作

MyInstance = null

然后,你无法读取MyInstance对象,

但你仍然可以阅读列表中的对象,

因为你有两个引用指向MyInstance,

换句话说,该对象有两个引用,

一个是

SomeClass MyInstance=SomeClass();

另一个存储在列表中,

你只需处置其中一个,

所以你仍然可以阅读列表[0]