如果我发送函数,改变字典
本文关键字:改变 字典 函数 如果 | 更新日期: 2023-09-27 18:06:10
我对字典有一个问题。小例子:
Dictionary<int, bool> dict = new Dictionary<int, bool>();
for (int i = 0; i < 5; i++)
{
dict.Add(i, true);
}
var dict2 = dict;
dict2.Clear();
之后,我必须清除字典。如果我需要一个不断变化的字典和一个不变的字典,我需要做什么?
创建一个副本,而不是仅仅复制reference:
var dict2 = new Dictionary<int, bool>(dict);
由于Dictionary
是类,所以它是引用类型。
var dict2 = dict;
实际上将dict
和dict2
分配给相同的引用。这就是为什么当您想使用Clear()
方法时,会影响它们两个。你应该复制它们,而不是复制它们的参考文献。
var dict2 = new Dictionary<int, bool>(dict);
源自 c#语言规范;
值类型的变量直接包含其数据,而变量引用类型存储对其数据的引用,后者是被称为物体。对于引用类型,可以是两个变量来引用相同的对象,因此可以对象引用的对象的操作其他变量。对于值类型,每个变量都有自己的变量数据的副本,并且不可能对一个到进行操作影响对方。