2014-12-19 105 views
4

我有一个Collection节点,特别是一个HTMLAgilityPack.HTMLNodeCollection节点的集合。我知道我可以做从节点提取和存储信息:C#:结合AddRange()和Lambda表达式

List<string> nodesList = new List<string>(); 

var nodes = myFile.DocumentNode.SelectNodes(file_path); 
foreach (var node in nodes) 
    nodesList.Add(node.InnerText); 

不过,我想要做的是应用AddRange(),而不是在foreach循环添加的项目。我正在尝试使用lambda表达式来执行此操作,但我对lambda表达式不够熟悉,无法正确执行此操作。我试图像

nodesList.AddRange(string[] arr = x => nodes.ToArray()[x].InnerText); 

联合,我知道是没有语法意义,但我不知道,甚至可以做到这一点。我只想收集Cast<string>(),但我需要从每个节点中提取文本。

任何关于如何将其放入AddRange()表达式的想法?

+1

出于好奇,你的第一个例子实际上是编译和运行? – 2014-12-19 02:48:08

+0

@GrantWinney是的。不是吗? – Bryant 2014-12-19 02:57:59

+1

你正在迭代节点的集合,然后直接将它们添加到字符串列表中...我只是想,如果没有选择你感兴趣的节点的属性是行不通的(即'nodesList.Add (node.InnerText);') – 2014-12-19 02:58:58

回答

4

您正在寻找IEnumerable. Select()

nodesList.AddRange(nodes.Select(node => node.InnerText)) 
+1

我想你甚至可以省略'ToArray()'。 – 2014-12-19 03:03:53

+1

@GrantWinney你是对的。我对HTMLAgilityPack文档做了一个懒惰的搜索,并没有发现它的HTMLNodeCollection是如何实现的......所以我只是安装它来确认。 – canon 2014-12-19 03:19:18