循环访问已转换为列表的 HtmlNode

本文关键字:列表 HtmlNode 转换 访问 循环 | 更新日期: 2023-09-27 18:21:59

经过一番搜索,我找到了在迭代HtmlNodes(Html Agility Pack(时修改它们的解决方案。在此示例中,将添加一个标记作为父标记到每个标记。我正在使用以下代码 (c#(:

foreach(HtmlNode currentNode in descendants.ToList())
{
   if (workingnode.name == "strong"){
       HtmlNode theParent = workingNode.ParentNode;
       HtmlNode newElement = workingDocument.CreateElement("a");
       newElement.SetAttributeValue("href", "Glossary.xhtml#gloss");
       newElement.AppendChild(workingNode);
       theParent.ReplaceChild(newElement, workingNode);
   }
}

在迭代后代之前对后代使用 ToList() 方法有哪些缺点?我只是担心,如果它很容易做到,这将是HtmlNode大多数修改问题的第一个建议。

循环访问已转换为列表的 HtmlNode

ToList 方法将循环访问集合并将每个项添加到泛型List。如果你的descendants变量是 IEnumerable<T> 或其他集合类型,那么调用它ToList是没有意义的,因为 foreach 循环可以接受IEnumerable<T>输入作为标准。因此,如果这是真的,那么以下行将更有效,因为它不必循环访问集合来创建另一个集合:

for (int i = descendants.Count() - 1; i >= 0; i--)
{
    // Modify the document by adding a parent or removing this node.
}