错误:并非所有的代码路径返回一个值
我写了下面的代码来算一个XML文件的节点:错误:并非所有的代码路径返回一个值
private Dictionary<string, int> ExtractNodeInfo(string fileContent)
{
XmlDocument xmlDocument;
xmlDocument = new XmlDocument();
xmlDocument.Load(fileContent);
var ediNodes = xmlDocument.DocumentElement.SelectNodes("/EDI");
Dictionary<string, int> nodeCount = new Dictionary<string, int>();
foreach (XmlNode nodes in ediNodes)
{
FileManager.nodeRecurse(nodes, nodeCount);
}
foreach (var entry in nodeCount)
{
Console.WriteLine(entry.ToString());
}
}
但它给我下面的错误:“XmlFileManager.FileManager.ExtractNodeInfo(串) ':并不是所有的代码路径都返回一个值。
您没有返回值。
你在你的方法结束需要一个return语句,在这种情况下:
return nodeCount;
非常感谢。这工作。 – user1255009 2012-04-02 16:44:18
@ user1255009单击此答案编号旁边的复选框将其标记为“答案”。 – 2012-04-02 17:20:37
你指定的返回类型,但你不随地返回任何东西。
您的方法的签名告诉它它有一个返回类型Dictionary<string, int>
。
在您的方法ExtractNodeInfo
中,您没有return
。
其他人都说过的话。
我看其他两个问题:
首先,XmlDocument.Load(string)
需要文件名不是XML数据。要做到这一点,您需要使用LoadXml()
方法。
其次,它看起来像你试图按名称计算节点。为什么要编写代码来遍历XML树?让框架为你工作。不写代码的代码你不必测试或调试。
该方法SelectNodes(string xpathExpression)
为您提供了与指定的XPath表达式匹配的文档中所有节点的平面列表。例如:
-
//*
的文件,包括文档根,文档内的深度的regardles中的每个节点。 -
//foo/bar[@type='data']
与type
属性,其值是data
,其直接祖先是在文档中的任何深度的foo
元件每bar
元件。 -
/EDI
(您的XPath表达式) 只要它被命名为'EDI'即为文档的根节点。 -
/EDI/*/foo
全部foo
元素是文档根元素的第二级子元素,EDI
。 -
/*
列表中的一个元素,即文档的根元素,与其名称无关。你可能想在这里使用SelectSingleNode()
方法,因为你知道你不会得到一个以上的元素。
写的XPath表达式为您提供了一组特定需要的节点和使用Linq的对象来构建字典,这样的:
private static Dictionary<string,int> CountNodesByName(TextReader reader , string xpathExpression)
{
XmlDocument xml = new XmlDocument() ;
xml.Load(reader);
Dictionary<string,int> instance = xml.DocumentElement
.SelectNodes(xpathExpression)
.Cast<XmlNode>()
.GroupBy(
x => x.Name ,
(name,nodes) => Tuple.Create(name , nodes.Count())
)
.ToDictionary(x => x.Item1 , x => x.Item2)
;
return instance ;
}
鉴于上述情况,
TextReader reader = OpenSomeXmlDataSourceForReading() ;
Dictionary<string,int> nodeFrequencies = CountNodesByName(reader , "/EDI//*") ;
将为任何深度的每个子节点生成一个按名称频率计数的字典,只要根节点名为EDI
。
再次读取错误'不是所有的代码路径都返回一个值' – 2012-04-02 16:43:02