我想使用一个类作为字典的键。但该类占用内存较大。所以,我想知道,当我们添加一个对象作为字典的键时,它是仅添加其引用还是添加完整副本。因为,如果添加了对象的完整副本,那么我可以只使用该对象的哈希码。
字典存储传入的任何值 - 条目的键和值都是如此。对于引用类型,该值是一个引用 - 不涉及复制引用所引用的对象的克隆。这是一个例子:
var dictionary = new Dictionary<int, StringBuilder>();
var builder = new StringBuilder("x");
dictionary.Add(5, builder);
// Retrieve the reference from the dictionary and append to it
dictionary[5].Append("y");
Console.WriteLine(builder); // Prints xy
这显示的是value事情的一面。密钥以相同的方式存储 - 作为引用 - 但这里有一个警告......如果你改变密钥引用的对象,那么在大多数情况下从根本上会破坏字典,因为密钥的哈希码添加条目时计算。通常您使用不可变类型(例如string
) 作为字典的键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)