Foreach 루프에서 Xlements를 제거합니다
문제
그래서 제거 할 버그가 있습니다
foreach (XElement x in items.Elements("x"))
{
XElement result = webservice.method(x);
if (/*condition based on values in result*/)
{
x.Remove();
}
}
문제는 x.remove ()를 호출하면 두 개의 요소 ( "x")가 있고 첫 번째가 제거되면 루프가 두 번째 x 요소로 이동하지 않도록 foreach를 변경한다는 것입니다.
그렇다면 어떻게 이것을 반복해야합니까? 아니면 다른 방법으로 다시 작성해야합니까?
해결책
LINQ가 다음과 같이 여기에서 당신을 도울 수 있다고 생각합니다.
using System.Linq;
void foo()
{
items.Elements("x")
.Where(x => condition(webservice.method(x)))
.Remove();
}
그렇지 않은 경우 작동하지 않으면 (즉, 내부 열거자가 여전히 무효화되어 있음) 선택한 요소의 얕은 사본을 만들고 다음과 같이 삭제하십시오.
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();
}
}
다른 팁
루프 로직 이전에 컬렉션을 만들고 새 컬렉션에 제거 할 요소를 추가 한 다음 새 컬렉션의 각 요소에서 항목을 호출하십시오.
foreach 대신에 for없이 시도하십시오.
제휴하지 않습니다 StackOverflow