编译器修改变量而不处理它

本文关键字:处理 修改 变量 编译器 | 更新日期: 2023-09-27 17:57:29

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

示例:

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());
        }
    }
}

有没有办法确保Dict2在更改Dict1时不会更改。
如果可能,没有const Dict2
我来自一个python环境,觉得这很令人不安
提前感谢:)

编译器修改变量而不处理它

您当前正在做的事情:

Dict2 = Dict1;

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

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

请记住,如果您的KeyValue是自定义对象(基于某个类),那么在这种情况下,您的第二个字典将具有与第一个字典相同的对象的引用。请参阅如何在.NET(特别是C#)中对对象进行深度复制?