2013-03-21 66 views
0

我對c#和html敏捷包頗爲陌生,我已經編寫了這段代碼來解析一個網頁。並非所有的代碼路徑都使用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,類別)「:並非所有的代碼路徑返回一個值,」我只是想知道是否有人將能夠給我一些建議在爲什麼會出現此錯誤消息。謝謝你盡你所能的幫助。

+0

你是不是其中的代碼 – 2013-03-21 10:22:06

+0

可能重複任何返回類別[「並非所有的代碼路徑返回一個值」(http://stackoverflow.com/questions/7936615/not-all-code-paths -return-a值) – 2013-03-21 10:23:41

回答

1

你的方法假設返回一個IList<Category>類型的對象,你的代碼中沒有return語句。可能你想從你的方法中返回categories,你可以在方法結束之前放置return語句。

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

的錯誤是不言自明:您的代碼不return任何東西,而該方法的簽名承諾它。

return categories;在方法結束時會做。

0

不必返回從方法其中的任何聲明返回ILIST

在後倒數第二「}」托架添加return categories;

0

你的方法retuns一個IList<Category>,但你是不是在返回一個IList<Category>任何地方你的代碼。呼叫: -

return categories; 
0

你是不是在代碼中任何returing類別

在你的代碼的末尾添加return語句就像我HV添加

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; 
} 
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返回類型的方法都需要使用的返回 關鍵字返回一個值。

相關問題