所以我得到了C#foreach循环,就像这样
foreach(Type s in source)
{
dic1.Clear();
dic1.Add(Key1, s.Attr1);
dic1.Add(Key2, s.Attr2);
...
dic1.Add(KeyN, s.AttrN);
dic2.Add(ind, dic1);
ind++;
}
它获取值并正确设置它们,没有问题。
但是,当dic1.Clear()
被调用时,它会清除dic1
中添加的dic2
并且用正在处理的新数据重写其内容,从而产生具有来自最后处理的数据/对象的相同数据的N量字典。 dic1.Clear()
是否真的会影响dic2
中添加的内容?如果是,我应该将dic1
复制到dicTemp
并将其添加到dic2
中吗?
感谢您提前。
答案 0 :(得分:2)
我想我现在得到你的问题了。
将参考对象添加到集合时,您将存储对象的引用,而不是值。
你应该做的是让循环体本地dic1
。
foreach(Type s in source)
{
var dic1 = new Dictionary<T1, T2>();
dic1.Add(Key1, s.Attr1);
dic1.Add(Key2, s.Attr2);
...
dic1.Add(KeyN, s.AttrN);
dic2.Add(ind, dic1);
ind++;
}
答案 1 :(得分:1)
由于您只通过dic1
进行一次操作,因此会导致:
dic2
中的所有值引用相同的字典实例您可能希望将行dic1.Clear()
更改为dic1 = new Dictionary<X, Y>()
。