0

次のような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" />

2回目の反復後は、次のようになります。

<Person name="Josh" id"=3" />
<Person name="Jacob" id"=4" />

しかし、次のようになります。

<Person name="Jacob" id"=4" />
<Person name="Jacob" id"=4" />

したがって、2回目の反復では、最初の要素と2番目の要素の両方が更新されます。

なぜですか?

4

1 に答える 1

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);
}
于 2012-12-05T10:35:38.813 に答える