【问题标题】:It is possible to use LINQ in HtmlAgilityPack in C#?可以在 C# 的 HtmlAgilityPack 中使用 LINQ 吗?
【发布时间】:2020-08-26 01:08:09
【问题描述】:

我学习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;
    }

【问题讨论】:

    标签: c# linq html-agility-pack ienumerable yield


    【解决方案1】:

    要使用 yield 关键字,您将从您的函数返回一个 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;
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多