2014-12-19 2 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 цикле. Я пытаюсь использовать выражение лямбда для этого, но я недостаточно хорошо знаком с лямбда-выражениями, чтобы сделать это правильно. Я пытаюсь совместить что-то вроде

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

Я знаю, что не имеет никакого синтаксический смысл, но я не уверен, что даже может это сделать. Я хотел бы только Cast<string>() коллекции, но мне нужно извлечь текст из каждого узла.

Любые идеи о том, как положить это в выражение AddRange()?

+1

из любопытства, делает ваш первый пример на самом деле компиляции и запуска? –

+0

@GrantWinney Да. Разве это не так? – Bryant

+1

Вы повторяете сборку узлов, а затем добавляете их непосредственно в список строк ... Я просто решил, что это не сработает без выбора только свойства интересующего вас узла (например, 'nodesList.Add (node.InnerText); ') –

ответ

4

Вы ищете IEnumerable. Select():

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

Я думаю, что вы можете даже опустить 'ToArray()'. –

+1

@GrantWinney Правильно. Я сделал ленивый поиск документации HTMLAgilityPack и не нашел ничего о том, как был реализован его «HTMLNodeCollection» ... поэтому я только что установил его для подтверждения. – canon

Смежные вопросы