1

我的字典有一个问题。小例子:

        Dictionary<int, bool> dict = new Dictionary<int, bool>();
        for (int i = 0; i < 5; i++)
        {
            dict.Add(i, true);
        }
        var dict2 = dict;
        dict2.Clear();

在此之后,我必须清除字典。如果我需要一本不断变化的字典和一本不变的字典,我需要做什么?

4

2 回答 2

4

创建一个副本,而不仅仅是复制参考:

var dict2 = new Dictionary<int, bool>(dict);
于 2013-03-28T08:42:53.503 回答
2

既然Dictionary,那么它就是引用类型

当你写

var dict2 = dict;

您实际上将dict和分配dict2给相同的引用。这就是为什么当你想使用Clear()方法时,它会影响它们。您应该复制它们而不是复制它们的引用。喜欢;

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

来自C# 语言规范

值类型的变量直接包含它们的数据,而引用类型的变量存储对其数据的引用,后者被称为对象。使用引用类型,两个变量可以引用同一个对象,因此对一个变量的操作可能会影响另一个变量引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。

于 2013-03-28T08:44:25.607 回答