2014-12-19 104 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