C#Dictionary Clear()清除字典中的字典

时间:2012-11-30 12:49:28

标签: c# clear dictionary

所以我得到了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中吗?

感谢您提前。

2 个答案:

答案 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>()