我想使用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 })
答案 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;
}
}
对我来说,这看起来更容易维护。