我比较熟悉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)”:并非所有代码路径都返回一个值“我只是想知道是否有人能够就此错误消息提供一些建议正在发生。感谢您提供的任何帮助。
答案 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;
}