在foreach循环
问题描述:
更新多个XElements我有一个看起来像这样的XML文件:在foreach循环
<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" />
所以第二次迭代更新第一个和第二个元素。
任何想法,为什么?
答
您将所有属性设置为同一对象实例pers
。您应该在循环中创建一个新的Person对象
foreach (var item in duplicatePersons)
{
Person pers = new Person();
pers.SetAttributeValue("id", item.Key);
pers.SetAttributeValue("name", item.Value);
allPersons.Add(pers);
}