C# 更新foreach循环中的多个元素

C# 更新foreach循环中的多个元素,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我有一个如下所示的XML文件: <Contacts> <Person name="James" id"=1" /> <Person name="Edward" id"=2" /> </Contacts> duplicatePersons是包含所有重复人员的词典 问题是,此foreach循环的第一次迭代正在创建: <Person name="Josh" id"=3" /> 在第二次迭代之后,它应该如下所示: <

我有一个如下所示的XML文件:

<Contacts>
    <Person name="James" id"=1" />
    <Person name="Edward" id"=2" />
</Contacts>
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);
}
foreach (var item in duplicatePersons)
{
    Person pers = new Person();
    pers.SetAttributeValue("id", item.Key);
    pers.SetAttributeValue("name", item.Value);
    allPersons.Add(pers);
}