-1

所以我得到了像这样的 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吗?

谢谢你的提前。

4

2 回答 2

1

我想我现在明白你的问题了。

当您将引用对象添加到集合时,您存储的是对该对象的引用,而不是值。

您应该做的是使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++;
}
于 2012-11-30T12:51:40.410 回答
1

由于您只在一个实例上进行操作,dic1这将导致:

  • dic2引用同一个字典实例的所有值
  • 该实例在每次迭代开始时被清除。

您可能希望将行更改dic1.Clear()dic1 = new Dictionary<X, Y>().

于 2012-11-30T12:52:11.973 回答