24

我有一个Dictionary<int, Product>. 如果将同一个产品添加到多个键,是否会为每个键存储该对象的新实例?还是只是对原始对象的引用?

这个集合非常大,每个产品都有 1-10 个 Keys。我主要关心的是内存分配。

4

4 回答 4

37

如果 Product 是引用类型(类而不是结构),则只会存储一个引用。

于 2012-10-24T22:43:19.987 回答
5

不,它应该使用对原始对象的相同引用。

但是,如果 Dictionary 被序列化/反序列化,我并不完全确定它将如何表现。

于 2012-10-24T22:43:02.397 回答
4

Dictionary存储您传递给它的键值的副本。它或任何其他集合/容器不可能存储对任何值的引用,因为容器可能比您尝试存储在其中的变量更长寿。

现在,正如其他人所说,如果值的类型是引用类型,那么变量的值只是一个引用,所以你只是存储了对变量的引用的副本。如果字典的值的类型是值类型,则将复制实际值。

于 2012-10-24T23:53:49.323 回答
0

引用类型始终作为引用存储。没有人会猜测您打算为您的类型使用什么“克隆”逻辑。如果您需要副本,则必须在放置到容器、传递给其他函数等之前自行创建它们。

复制值类型(创建简单的字节表示副本,但是所有引用值仍将是引用),除非作为 ref 传递给函数。对于容器,尽管它们将是副本。除非您为它们创建引用类型包装器。

于 2012-10-24T22:44:23.847 回答