【问题标题】:Update multiple XElements in a foreach loop在 foreach 循环中更新多个 XElement
【发布时间】:2014-02-16 04:05:36
【问题描述】:

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

<Contacts>
    <Person name="James" id"=1" />
    <Person name="Edward" id"=2" />
</Contacts>

我想做点什么,所以如果 ID=2,再创建 10 个 Person 并更新他们的 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" />

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

知道为什么吗?

【问题讨论】:

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


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多