如果我发送函数,改变字典

本文关键字:改变 字典 函数 如果 | 更新日期: 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;

实际上将dictdict2分配给相同的引用。这就是为什么当您想使用Clear()方法时,会影响它们两个。你应该复制它们,而不是复制它们的参考文献。

;
var dict2 = new Dictionary<int, bool>(dict);

源自 c#语言规范;

值类型的变量直接包含其数据,而变量引用类型存储对其数据的引用,后者是被称为物体。对于引用类型,可以是两个变量来引用相同的对象,因此可以对象引用的对象的操作其他变量。对于值类型,每个变量都有自己的变量数据的副本,并且不可能对一个到进行操作影响对方。