可以在 C# 的 HtmlAgilityPack 中使用 LINQ 吗?
It is possible to use LINQ in HtmlAgilityPack in C#?
我学习C#
并尝试编写一个简单的应用程序。想问你关于帮助我优化下面的代码。
我写了 2 个方法并考虑使用 yield 和 LINQ
让它变得更好。想想这是否可能?
public List<string> getsSubpagesUrls(int subpages)
{
List<string> subpagesUrls= new List<string>();
for (int i = 1; i < subpages; i++)
{
string singleUrl = $"url/search%&page={i}";
subpagesUrls.Add(singleUrl);
}
return subpagesUrls;
}
public List<string> getAllAnnouncementIds(int numberOfSubpages)
{
List<string> annIds = new List<string>();
foreach (var url in getsSubpagesUrls(numberOfSubpages))
{
HtmlWeb web = new HtmlWeb();
var htmlDoc = web.Load(url);
var htmlBody = htmlDoc.DocumentNode.SelectNodes("//xpath");
var ids = htmlBody.Elements("element");
foreach (var id in ids)
{
annIds.Add(id.Attributes["data-item-id"].Value);
}
}
return annIds;
}
要使用 yield
关键字,您将获得 return 一个 IEnumerable 函数,我稍微重构了您的代码:
public IEnumerable<string> getsSubpagesUrls(int subpages)
=> Enumerable.Range(1, subpages).Select(i => new string($"url/search%&page={i}"));
public IEnumerable<string> getAllAnnouncementIds(int numberOfSubpages)
{
HtmlWeb web = new HtmlWeb();
foreach (var url in getsSubpagesUrls(numberOfSubpages))
{
var htmlDoc = web.Load(url);
var htmlBody = htmlDoc.DocumentNode.SelectNodes("//xpath");
var ids = htmlBody.Elements("element");
foreach (var id in ids)
{
yield return id.Attributes["data-item-id"].Value;
}
}
}
我学习C#
并尝试编写一个简单的应用程序。想问你关于帮助我优化下面的代码。
我写了 2 个方法并考虑使用 yield 和 LINQ
让它变得更好。想想这是否可能?
public List<string> getsSubpagesUrls(int subpages)
{
List<string> subpagesUrls= new List<string>();
for (int i = 1; i < subpages; i++)
{
string singleUrl = $"url/search%&page={i}";
subpagesUrls.Add(singleUrl);
}
return subpagesUrls;
}
public List<string> getAllAnnouncementIds(int numberOfSubpages)
{
List<string> annIds = new List<string>();
foreach (var url in getsSubpagesUrls(numberOfSubpages))
{
HtmlWeb web = new HtmlWeb();
var htmlDoc = web.Load(url);
var htmlBody = htmlDoc.DocumentNode.SelectNodes("//xpath");
var ids = htmlBody.Elements("element");
foreach (var id in ids)
{
annIds.Add(id.Attributes["data-item-id"].Value);
}
}
return annIds;
}
要使用 yield
关键字,您将获得 return 一个 IEnumerable 函数,我稍微重构了您的代码:
public IEnumerable<string> getsSubpagesUrls(int subpages)
=> Enumerable.Range(1, subpages).Select(i => new string($"url/search%&page={i}"));
public IEnumerable<string> getAllAnnouncementIds(int numberOfSubpages)
{
HtmlWeb web = new HtmlWeb();
foreach (var url in getsSubpagesUrls(numberOfSubpages))
{
var htmlDoc = web.Load(url);
var htmlBody = htmlDoc.DocumentNode.SelectNodes("//xpath");
var ids = htmlBody.Elements("element");
foreach (var id in ids)
{
yield return id.Attributes["data-item-id"].Value;
}
}
}