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

本文关键字:HTML 返回值 代码 路径 | 更新日期: 2023-09-27 18:04:56

我对 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(":并非所有代码路径都返回值" 我只是想知道是否有人能够给我一些建议,为什么会出现此错误消息。感谢您提供的任何帮助。

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

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

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

这个错误是不言自明的:你的代码没有return任何东西,而方法的签名承诺它会

方法末尾的return categories;就可以了。

该方法

承诺在此处返回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 的方法需要使用 关键字以返回值。

您不会从声明返回 ILIst 的方法返回任何内容

在倒数第二个"}"括号后添加return categories;

您的方法会重新调整IList<Category>但您不会在代码中的任何位置返回IList<Category>。叫:-

return categories;

您不会在代码中的任何位置重新设置类别

在代码末尾添加返回语句,就像我添加的那样

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;
}