迭代已转换为列表的HtmlNodes

时间:2014-09-16 13:25:45

标签: c# html html-agility-pack

经过一番搜索,我找到了一个解决方案来修改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修改问题的第一个建议。

1 个答案:

答案 0 :(得分:1)

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. } 输入为标准。因此,如果这是真的,那么以下行会更有效率,因为它不必遍历集合来创建另一个集合:

{{1}}