我想将一个类用作字典的键。但是就内存消耗而言,该类很大。因此,我想知道,当我们将对象添加为字典的键时,它只是添加其引用还是添加了完整副本。这样,如果添加了对象的完整副本,那么我就可以使用对象的哈希码。
答案 0 :(得分:6)
字典存储传入的任何值-键和条目的值都是这种情况。对于引用类型,该值是一个引用-无需克隆即可复制该引用所引用的对象。这是一个示例:
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
)用作字典的键。
答案 1 :(得分:2)
修改后的答案: C#词典仅存储对这些Class实例的引用以及键类型的哈希码。它本身不存储实际值。
答案 2 :(得分:2)