recorrer index for example array .net c#-3.0 foreach xelement

.net - index - xelement c# example



Eliminando XElements en un bucle foreach (3)

Por lo tanto, tengo un error para eliminar

foreach (XElement x in items.Elements("x")) { XElement result = webservice.method(x); if (/*condition based on values in result*/) { x.Remove(); } }

El problema es que llamar a x.Remove () altera el foreach de tal manera que si hay dos elementos ("x"), y el primero se elimina, el bucle no llega al segundo elemento x.

Entonces, ¿cómo debería estar haciendo esto? ¿O debería reescribirse de otra manera?


Cree una colección antes de la lógica del bucle, agregue los elementos que se eliminarán a la nueva colección y luego llame a los elementos. Remueva en cada elemento de la nueva colección.


Pruébalo sin un for en lugar del foreach.


Sospecho que Linq puede ayudarlo aquí de la siguiente manera.

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

Si eso no funciona (es decir, el enumerador interno aún está invalidado), haga una copia superficial de los elementos seleccionados y elimínelos de la siguiente manera.

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