C# 抄写字典

C# 抄写字典,c#,dictionary,copy,C#,Dictionary,Copy,我正在尝试将dic1复制到dic2,因为我想在不更改dic2的情况下更改dic1。我的代码是: private Dictionary<string, string> dic1; private Dictionary<string, string> dic2; 专用词典dic1; 专用词典dic2; 然后在dic1中输入值后: Dictionary<string,string> dic2 = new Dictionary<string,string&g

我正在尝试将dic1复制到dic2,因为我想在不更改dic2的情况下更改dic1。我的代码是:

private Dictionary<string, string> dic1;
private Dictionary<string, string> dic2;
专用词典dic1;
专用词典dic2;
然后在dic1中输入值后:

Dictionary<string,string> dic2 = new Dictionary<string,string>(dic1);
Dictionary dic2=新字典(dic1);

但dic2的值显示为null。如何将dic1的内容复制到dic2,然后清除dic1?

编辑:我知道这不是最好的选择。但这是另一种选择

Dictionary<string, string> first = new Dictionary<string, string>()
        {
            {"1", "One"},
            {"2", "Two"},
            {"3", "Three"},
            {"4", "Four"},
            {"5", "Five"},
            {"6", "Six"},
            {"7", "Seven"},
            {"8", "Eight"},
            {"9", "Nine"},
            {"0", "Zero"}
        };

        Dictionary<string, string> second = new Dictionary<string, string>();
        foreach (string key in first.Keys)
        {
            second.Add(key, first[key]);
        }

        first["1"] = "newone";
        // Printing the dictinaries
        Console.WriteLine("first dict");
        foreach ( string key in first.Keys)
        {
            Console.Write(first[key]+", ");
        }
        //newone, Two, Three, Four, Five, Six, Seven, Eight, Nine, Zero, 

        Console.WriteLine("\nsecond dict");
        foreach ( string key in second.Keys)
        {
            Console.Write(second[key]+", ");
        } 
        //One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Zero,
    }
Dictionary first=新字典()
{
{“1”,“1”},
{“2”,“2”},
{“3”,“3”},
{“4”,“4”},
{“5”,“5”},
{“6”,“6”},
{“7”,“7”},
{“8”,“8”},
{“9”,“9”},
{“0”,“零”}
};
Dictionary second=新字典();
foreach(第一个.Keys中的字符串键)
{
第二,添加(键,第一个[键]);
}
第一个[“1”]=“新的”;
//印刷词汇
控制台写入线(“第一条命令”);
foreach(第一个.Keys中的字符串键)
{
Console.Write(第一个[键]+“,”);
}
//纽一,二,三,四,五,六,七,八,九,零,
控制台写入线(“\n第二条命令”);
foreach(第二个.Keys中的字符串键)
{
Console.Write(第二个[键]+“,”);
} 
//一,二,三,四,五,六,七,八,九,零,
}

正如Jimi在评论中指出的,当您在变量前面加上一个类型时,您正在声明变量
dic2
。下面的代码显然是类级字段;我可以这样说,因为它们的前缀是
private
关键字:

private Dictionary<string, string> dic1;
private Dictionary<string, string> dic2;
专用词典dic1;
专用词典dic2;
因此,我假设在您的类的其他地方,在某些函数中,您正在使用:

Dictionary<string,string> dic2 = new Dictionary<string,string>(dic1);
Dictionary dic2=新字典(dic1);
也就是说,正如Jimi指出的,重新声明另一个局部变量,而不是设置类级字段。要修复并设置类级别字段而不是临时局部变量,只需省略类型:

dic2 = new Dictionary<string,string>(dic1);
dic2=新字典(dic1);

dic2=新词典(dic1)
您可能正在创建一个本地
dic2
,然后检查从未更新过的
dict2
字段。您能提供一个?使用
newdictionary(dic1)
复制字典
dic1
在您的示例中为空,您正在使用它初始化
dic2
,因此
dic2
中不会有任何项。如果您没有重复的键:var dic3=dic1.Concat(dic2).GroupBy(x=>x.Key).ToDictionary(x=>x.Key,y=>y.FirstOrDefault());是否在初始化它的这行代码之后设置了断点并检查了
dic2
的值?现在是否有
dic2
成员的两个实例(一个是方法的本地实例,另一个是类字段的实例)?尽管此解决方案可行,但我不建议在构造函数支持将字典复制为输入时手动迭代整个字典:
newdictionary(dictToCopy)
OP初始化dict2的方式不成问题。