编译器修改变量而不解决它

时间:2015-06-22 15:02:36

标签: c# variables dictionary

在我的程序中,我发现在将变量分配给另一个变量时,修改第一个变量,也会修改第二个变量。

示例:

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Dict_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void TestButton_Click(object sender, EventArgs e)
        {
            Dictionary<string, int> Dict1 = new Dictionary<string, int>();
            Dict1.Add("one", 1);
            Dict1.Add("two", 2);

            Dictionary<string, int> Dict2 = new Dictionary<string, int>();
            Dict2 = Dict1;

            Dict1.Remove("two");

            MessageBox.Show(Dict2["two"].ToString());

        }
    }
}

有没有办法确保在更改Dict1时Dict2不会改变。
如果可能,没有const Dict2
我来自一个蟒蛇环境,发现这非常令人不安 在此先感谢:)

1 个答案:

答案 0 :(得分:3)

您目前正在做什么:

Dict2 = Dict1;

是引用复制,因此Dict1Dict2都指向同一位置。您可以创建一个新副本,如:

Dict2 = Dict1.ToDictionary(d=> d.Key, d=> d.Value);

记住,如果您的KeyValue是自定义对象(基于某些类),那么您的第二个字典将引用与第一个相同的对象字典。见How do you do a deep copy of an object in .NET (C# specifically)?