在foreach循环中更新多个XElements

时间:2012-12-05 10:31:26

标签: c# xml linq linq-to-xml

我有一个如下所示的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" />

所以第二次迭代会更新第一个和第二个元素。

知道为什么吗?

1 个答案:

答案 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);
}