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