并非所有代码路径都使用html敏捷包返回值

时间:2013-03-21 10:20:36

标签: c# html-agility-pack

我比较熟悉c#和html敏捷包我已经编写了这段代码来解析网页。

private IList<Category> GetFeatureSubCategories(HtmlNode std, Category category)
    {
        List<Category> categories = new List<Category>();
        {
            if (category.name == "Featured")
            {
                var nodes = std.SelectNodes("//span[contains(@class,'widget')] [position() <= 4]");

                foreach (var node in nodes)
                {
                    string name = SiteParserUtilities.ParserUtilities.CleanText(System.Net.WebUtility.HtmlDecode(node.InnerText));
                    string url = node.Attributes["href"].Value;
                    string identifier = url.Split('/').Last().Replace(".html", "");
                    WriteQueue.write(string.Format(" Category [{0}].. {1} ", name, url));

                    IList<Category> sub = GetSubCategories(std);
                    Category c = new Category()
                    {
                        active = true,
                        Categories = sub.ToArray(),
                        description = "",
                        identifier = identifier,
                        name = name,
                        Products = new Product[0],
                        url = url,
                    };
                    StatisticCounters.CategoriesCounter();
                    categories.Add(c);
                }


            }

        }

    }

我收到一条错误消息“SiteParser.GetFeatureSubCategories(HtmlAgilityPack.HtmlNode,Category)”:并非所有代码路径都返回一个值“我只是想知道是否有人能够就此错误消息提供一些建议正在发生。感谢您提供的任何帮助。

6 个答案:

答案 0 :(得分:1)

您的方法假设返回IList<Category>类型的对象,您在代码中的任何位置都没有return语句。您可能希望从方法返回categories,您可以将return语句放在方法结束之前。

private IList<Category> GetFeatureSubCategories(HtmlNode std, Category category)
{
        List<Category> categories = new List<Category>();
        {
        //.................
return categories;
}

答案 1 :(得分:1)

错误非常明显:您的代码不会return任何东西,而方法的签名承诺它会。

该方法结束时的

return categories;将完成。

答案 2 :(得分:1)

该方法承诺在此处返回IList<Category>

private IList<Category> GetFeatureSubCategories

所以它必须以任何方式返回它(或至少null这是默认值。)

但是你没有返回列表。所以最后只需添加return categories;

private IList<Foo> GetFeatureSubCategories(HtmlNode std, Foo category)
{
    List<Category> categories = new List<Category>();
    {
        if (category.Name == "Featured")
        {
            var nodes = std.SelectNodes("//span[contains(@class,'widget')] [position() <= 4]");
            foreach (var node in nodes)
            {
               // blah ...
            }
            // blah ...
        }
    }
    return categories;
}

MSDN

  

使用返回值需要具有非void返回类型的方法   要返回值的关键字。

答案 3 :(得分:0)

您没有从声明返回ILIst的方法返回任何内容

在倒数第二个'}'括号

之后添加return categories;

答案 4 :(得分:0)

您的方法返回IList<Category>但您没有在代码中的任何位置返回IList<Category>。致电: -

return categories;

答案 5 :(得分:0)

您不会在代码中的任何位置返回类别

在代码末尾添加return语句,就像我添加了

一样
private IList<Category> GetFeatureSubCategories(HtmlNode std, Category category)
{
    List<Category> categories = new List<Category>();
    {
        if (category.name == "Featured")
        {
            var nodes = std.SelectNodes("//span[contains(@class,'widget')] [position() <= 4]");

            foreach (var node in nodes)
            {
                string name = SiteParserUtilities.ParserUtilities.CleanText(System.Net.WebUtility.HtmlDecode(node.InnerText));
                string url = node.Attributes["href"].Value;
                string identifier = url.Split('/').Last().Replace(".html", "");
                WriteQueue.write(string.Format(" Category [{0}].. {1} ", name, url));

                IList<Category> sub = GetSubCategories(std);
                Category c = new Category()
                {
                    active = true,
                    Categories = sub.ToArray(),
                    description = "",
                    identifier = identifier,
                    name = name,
                    Products = new Product[0],
                    url = url,
                };
                StatisticCounters.CategoriesCounter();
                categories.Add(c);
            }
        }
    }
         return categories;
}