我有一个如下所示的XML文件:
<Contacts>
<Person name="James" id"=1" />
<Person name="Edward" id"=2" />
</Contacts>
我想做点什么,所以如果ID = 2,再创建10个人并更新他们的ID和名字,这样:
if (person.ID == 2)
{
foreach (var item in duplicatePersons)
{
pers.SetAttributeValue("id", item.Key);
pers.SetAttributeValue("name", item.Value);
allPersons.Add(pers);
}
}
duplicatePersons是一个包含所有重复人物的字典。
问题是,这个foreach循环的第一次迭代正在创建:
<Person name="Josh" id"=3" />
第二次迭代后,它应该如下所示:
<Person name="Josh" id"=3" />
<Person name="Jacob" id"=4" />
但看起来像是:
<Person name="Jacob" id"=4" />
<Person name="Jacob" id"=4" />
所以第二次迭代会更新第一个和第二个元素。
知道为什么吗?
答案 0 :(得分:1)
将所有属性设置为同一对象实例pers
。您应该在循环中创建一个新的Person对象
foreach (var item in duplicatePersons)
{
Person pers = new Person();
pers.SetAttributeValue("id", item.Key);
pers.SetAttributeValue("name", item.Value);
allPersons.Add(pers);
}