Использование метода в лямбда-выражении - HTMLDoc - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу загрузить содержимое в список htmlDocument с помощью пакета Agility HTML.

Я успешно достиг того, что хочу, используя:

        var htmllist = new List<HtmlDocument>();



        int counter = 0;

        foreach(var c in content)
        {

            htmllist.Add(new HtmlDocument());
            htmllist[counter].LoadHtml(c);
            counter += 1;
        }

Как я могунаписать это в лямбда-выражении?Я попробовал:

 var htmllist = content.Select(p => new HtmlDocument() {Text = p })

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Enumerable.Select принимает произвольный селектор как Func<TSource,TResult>.Таким образом, вы можете встроить метод преобразования, но imho он действительно не выглядит великолепно…

content.Select(c => {var doc = new HtmlDocument(); doc.LoadHtml(c); return doc;});

Если вы используете C #> = 7.0, вы можете подумать об использовании локальной функции для этого.Например,

void Convert(IEnumerable<string> content)
{
    var htmls = content.Select(ConvertToHtml);

    HtmlDocument ConvertToHtml(string c)
    {
        var doc = new HtmlDocument();
        doc.LoadHtml(c);
        return doc;
    }
}

Это выглядит для меня более понятным.

0 голосов
/ 19 февраля 2019

Вам нужно добавить ToList() для выполнения запроса, например

var htmllist = content.Select(p => new HtmlDocument() { Text = p }).ToList();

За ваш комментарий и другой комментарий: вы можете немного изменить свой существующий код, например

private HtmlDocument LoadHtmlFromContent(string content)
{
  HtmlDocument doc = new HtmlDocument();
  doc.LoadHtml(content);
  return doc;
}

Теперь назовите это в вашем запросе Linq как

var htmllist = content.Select(p => this.LoadHtmlFromContent(p)).ToList();
...