我想将一个类用作字典的键。但是就内存消耗而言,该类很大。因此,我想知道,当我们将对象添加为字典的键时,它只是添加其引用还是添加了完整副本。因为,如果添加了对象的完整副本,那么我可以使用对象的哈希码。
字典存储传递的任何值-键和条目的值都是这种情况。对于引用类型,该值是一个引用-无需克隆即可复制该引用所引用的对象。这是一个例子:
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
Run Code Online (Sandbox Code Playgroud)
这表明了事物的价值。密钥以相同的方式存储(作为参考),但是这里有一个警告……如果您更改密钥所指的对象,那么从根本上说,在大多数情况下,这将破坏字典,因为密钥是哈希码在添加条目时进行计算。通常,您使用不可变类型(如string
)作为字典的键。
修改后的答案:C#字典仅存储对这些类实例的引用和密钥类型的哈希码。它本身不存储实际值。
归档时间: |
|
查看次数: |
659 次 |
最近记录: |