在下面的代码中,我使用 foreach 循环来检查节点列表中的每个节点并删除其中的一些节点。
删除一个节点后,foreach 循环抛出以下错误:
“元素列表已更改。枚举操作无法继续”。
我怎样才能避免它?
public static XmlNodeList Scan(XmlNodeList nodeList)
{
string elementValue = null;
foreach (XmlNode xmlElement in nodeList)
{
elementValue = xmlElement.InnerText;
if (elementValue.Length >= 6 && elementValue.Substring(0, 3) == "999")
{
continue;
}
else
{
XmlNode node = xmlElement.ParentNode;
node.RemoveChild(xmlElement);
}
}
return nodeList;
}
由于您并不是简单地从要循环的集合中删除项目,因此我不确定“使用 for 循环”是否有效。
下面需要两个步骤:
- 创建一个常规列表,其中包含要与其父级分离的所有元素。
- 通过迭代不受分离影响的常规列表,将这些元素与其父元素分离。
public static XmlNodeList Scan(XmlNodeList nodeList)
{
List<XmlNode> toRemove = new List<XmlNode>();
foreach (XmlNode xmlElement in nodeList)
{
string elementValue = xmlElement.InnerText;
if (elementValue.Length < 6 || elementValue.Substring(0, 3) != "999")
{
toRemove.Add(xmlElement);
}
}
foreach(XmlNode xmlElement in toRemove)
{
XmlNode node = xmlElement.ParentNode;
node.RemoveChild(xmlElement);
}
return nodeList;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)