我有一个<string>获取字符串的 List 函数,int 如何使用它来工作?



编辑:我试图使递归:在 Form1 的顶部,我有:

List<string> webSites = new List<string>();
        List<string> csFiles = new List<string>();

在构造函数中,我有:

webCrawler(url, 2); 

然后我有函数getLinks:

private void getLinks()
        {
            foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
            {
                var href = link.Attributes["href"].Value;
                richTextBox1.Text += href + Environment.NewLine;
                webSites.Add(href);
            }
        }
private List<string> test(string url, int levels)
            {
                doc = hw.Load(url);
                getLinks();
                if (levels == 0)
                {
                    return csFiles;
                }
                else
                {
                    for (i = 0; i < webSites.Count(); i++)
                    {
                        string t = webSites[i];
                        var f = levels * test(url, levels - 1);
                    }
                }
                return csFiles;
            }

网站和csFile都是List,级别是int。问题是在线:var f = levels * test(url, levels - 1);在右侧,im 收到错误:错误运算符"*"不能应用于类型为"int"和"System.Collections.Generic.List "的操作数

我该如何解决它?


在函数测试中,我还调用函数getLinks()我还需要为 cs 文件创建一个函数,该函数只会从每个站点取出.cs文件,最后在测试函数中我需要返回 csFiles 列表。

在行中: "var f = levels * test(url, levels - 1);

f 设置为等于 "levels" a int 的结果,以及方法 "test(url, levels -1)" 的结果。

方法 "test(url, levels - 1)" 的结果是字符串类型的列表。

这意味着您正在尝试将整数和列表相乘。

您可以简单地使用 .计数或 .长度。。。

该行应为:"var f = levels * test(url, levels - 1)。计数();"

感觉就像 100 级 cs 课程的家庭作业,但假设目前不是,我将把它作为一种方法:

public static List<string> CrawlWithDepth(string url, int depth)
{
    var ret = new List<string>();
    var linksFromPage = GetLinks(url);
    ret.AddRange(linksFromPage);
    if (depth > 0)
    {
        foreach (var childLink in linksFromPage)
        {
            var childCrawlResults = CrawlWithDepth(childLink, depth - 1);
            ret.AddRange(childCrawlResults);
        }
    }
}
private static List<string> GetLinks(string url)
{
    var ret = new List<string>();
    foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
    {
        var href = link.Attributes["href"].Value;
        ret.Add(href);
    }
    return ret;
}

最新更新