在foreach循环

在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); 
}