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

时间:2012-05-13 18:25:01

标签: c#

编辑: 我想尝试递归: 在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,级别是int。 问题在于:var f = levels * test(url, levels - 1); 在右侧我得到错误:错误运算符'*'不能应用于'int'和'System.Collections.Generic.List

类型的操作数

我该如何解决?


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

2 个答案:

答案 0 :(得分:0)

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

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

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

这意味着您正在尝试将整数与List相乘。

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

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

答案 1 :(得分: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;
}