Удаление узлов в цикле по products
вызывает его изменение. Поскольку это IEnumerable<XElement>
, вам нужно избегать ленивых вычислений, чтобы обработать весь результат сразу. Для этого просто добавьте вызов к ToArray()
или ToList()
:
For Each product In products.ToArray()
product.Remove()
Next
Обратите внимание, что приведенный выше код соответствует следующему фрагменту. Это не то же самое, что добавление ToArray()
при объявлении переменной products
:
Dim temp = products.ToArray()
For Each product In temp
product.Remove()
Next
Проблема, с которой вы столкнулись, кратко изложена на этой странице MSDN: Смешанные ошибки декларативного кода / императивного кода , в частности, раздел под заголовком «Удаление во время итерации».
Если вам не нужно работать с каждым product
до его удаления, первый подход с использованием Remove
метода расширения намного проще: products.Remove()
.