-1

编辑:我试图进行递归:在 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;
            }

webSites 和 csFiles 都是 List,levels 是 int。问题在于:var f = levels * test(url, levels - 1); 在右侧我得到错误:错误运算符'*'不能应用于'int'和'System.Collections.Generic.List类型的操作数

我该如何解决?


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

4

2 回答 2

0

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

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

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

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

您可以简单地使用 .Count 或 .Length ...

该行应为:“var f = levels * test(url, levels - 1).Count();”

于 2012-05-13T18:29:55.297 回答
0

感觉就像是 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;
}
于 2012-05-14T03:12:25.937 回答