我有Dictionary<int, Product>
。如果将同一产品添加到多个密钥,则为每个密钥存储该对象的新实例?或者只是对原始对象的引用?
此集合非常大,每个产品都有1-10个密钥。我主要关注的是内存分配。
答案 0 :(得分:29)
如果Product是引用类型(类而不是struct),则只存储引用。
答案 1 :(得分:4)
不,它应该使用与原始对象相同的引用。
但是,如果将字典序列化/反序列化,我并不完全确定它的行为方式。
答案 2 :(得分:3)
Dictionary
会记录您传递密钥值的副本。对于它或任何其他集合/容器来说,它不可能存储对任何值的引用,因为容器可能比你试图存储在其中的变量更长。现在,正如其他人所说,如果值的类型是引用类型,则变量的值只是一个引用,因此您只需将引用的副本存储到变量中。如果字典值的类型是值类型,则将复制实际值。
答案 3 :(得分:0)
引用类型始终存储为引用。没有人会猜测你想要什么样的“克隆”逻辑。如果你需要副本,你必须自己创建它们才能放入容器,传递给其他功能等等。
复制值类型(简单地创建字节表示副本,但所有引用值仍将是引用),除非作为ref传递给函数。对于容器,虽然它们将是副本。除非你为它们创建一个引用类型包装器。