我有一个Dictionary<int, Product>
。如果同一个Product被添加到多个键中,那么每个键会存储一个新的实例对象,还是仅存储对原始对象的引用?
这个集合非常大,每个产品将有1-10个键与之关联。我的主要担忧是内存分配。
我有一个Dictionary<int, Product>
。如果同一个Product被添加到多个键中,那么每个键会存储一个新的实例对象,还是仅存储对原始对象的引用?
这个集合非常大,每个产品将有1-10个键与之关联。我的主要担忧是内存分配。
不,它应该使用相同的原始对象引用。
但是,如果对字典进行序列化/反序列化,我不太确定它会如何行为。
Dictionary
会存储您传递给它的键的值的副本。对于它或任何其他集合/容器来说,存储对任何值的引用是不可能的,因为容器可能会比您试图存储在其中的变量存在更长的时间。引用类型始终以引用的方式存储。没有人会猜测你对类型的"克隆"逻辑的意图。如果你需要复制,你必须在放入容器、传递给其他函数等之前自己创建副本。
值类型会被复制(简单地复制字节表示,但所有引用值仍将是引用),除非作为引用传递给函数。对于容器来说,它们会成为副本。除非你为它们创建一个引用类型的包装器。