Frage

Also, ich habe einen Fehler

entfernen
foreach (XElement x in items.Elements("x")) 
{
    XElement result = webservice.method(x);

    if (/*condition based on values in result*/) 
    {
        x.Remove();
    }
}

Das Problem ist, dass Aufruf x.Remove () ändert die foreach, so dass, wenn es zwei Elemente ( „x“), und die ersten entfernt wird, die Schleife nicht auf das zweite Element x bekommt.

Wie sollte ich das sein Looping? Oder soll dies eine andere Art und Weise neu geschrieben werden?

War es hilfreich?

Lösung

Ich vermute, dass Linq der Lage sein, können Sie sich hier wie zu helfen folgt.

using System.Linq;

void foo()
{
    items.Elements("x")
         .Where(x => condition(webservice.method(x)))
         .Remove();
}

Wenn das nicht funktioniert (das heißt die interne enumerator noch für ungültig erklärt), macht eine flache Kopie der ausgewählten Elemente und löschen Sie sie folgt, wie.

using System.Linq;

void foo()
{
    List xElements = items.Elements("x")
                          .Where(x => condition(webservice.method(x)))
                          .ToList();

    for (int i = xElements.Count - 1; i > -1; i--)
    {
        xElements[i].Remove();
    }
}

Andere Tipps

Erstellen Sie eine Sammlung vor der Schleife Logik, fügen Sie die Elemente der neuen Kollektion entfernt werden, dann die items.Remove in der neuen Kollektion auf jedem Element aufrufen.

Versuchen Sie es ohne eine für anstelle der foreach.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top