编译器修改变量而不处理它
本文关键字:处理 修改 变量 编译器 | 更新日期: 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;
是引用复制,因此Dict1
和Dict2
都指向同一位置。你可以创建一个新的副本,如:
Dict2 = Dict1.ToDictionary(d=> d.Key, d=> d.Value);
请记住,如果您的Key
和Value
是自定义对象(基于某个类),那么在这种情况下,您的第二个字典将具有与第一个字典相同的对象的引用。请参阅如何在.NET(特别是C#)中对对象进行深度复制?