在Lambda表达式中使用方法-HTMLDoc

时间:2019-02-19 12:38:35

标签: c# lambda html-agility-pack

我想使用HTML Agility软件包将内容加载到htmlDocument列表中。

我已经成功实现了想要使用的功能:

        var htmllist = new List<HtmlDocument>();



        int counter = 0;

        foreach(var c in content)
        {

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

如何在Lambda表达式中编写此内容?我尝试过:

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

2 个答案:

答案 0 :(得分:0)

您需要添加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();

答案 1 :(得分:0)

Enumerable.Select接受任意选择器作为Func<TSource,TResult>。因此,您可以内联转换方法,但是恕我直言,它看起来确实不怎么样…

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

如果您使用的是C#> = 7.0,则可以考虑使用local function。例如

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

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

对我来说,这看起来更容易维护。