0

私は、Webページの一部を解析するためにこのコードを書いた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)': すべてのコード パスが値を返すわけではありません」というエラー メッセージが表示される ご協力いただきありがとうございます。

4

6 に答える 6

1

メソッドは type のオブジェクトを返すと想定されていますが、コードのどこにもステートメントIList<Category>がありません。returnメソッドから戻りたいcategories場合は、メソッドの終了直前に return ステートメントを配置できます。

private IList<Category> GetFeatureSubCategories(HtmlNode std, Category category)
{
        List<Category> categories = new List<Category>();
        {
        //.................
return categories;
}
于 2013-03-21T10:21:38.077 に答える
1

このエラーは一目瞭然です。コードはreturn何もしませんが、メソッドの署名はそれを約束します。

return categories;メソッドの最後に行います。

于 2013-03-21T10:22:08.153 に答える
1

ここでa を返すメソッドの約束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 :

return キーワードを使用して値を返すには、void 以外の戻り値の型を持つメソッドが必要です。

于 2013-03-21T10:24:59.743 に答える
0

メソッドは aを返しますが、コードIList<Category>のどこにも a を返しません。IList<Category>電話: -

return categories;
于 2013-03-21T10:23:31.557 に答える
0

コードのどこにもカテゴリを返していません

i hv added のように、コードの最後に 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;
}
于 2013-03-21T10:23:32.997 に答える
0

ILIst を返すと宣言しているメソッドから何も返していません

return categories;最後の '}' ブラケットの 2 番目の後に追加

于 2013-03-21T10:22:18.517 に答える