错误:并非所有代码路径都返回值
本文关键字:代码 路径 返回值 错误 | 更新日期: 2023-09-27 18:29:50
我编写了以下代码来计算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(string(":并非所有代码路径都返回值。
您没有返回值。
在方法末尾需要一个 return 语句,在本例中:
return nodeCount;
方法的签名表明它的返回类型为 Dictionary<string, int>
。
在您的方法ExtractNodeInfo
中,您没有return
。
您已经指定了返回类型,但您没有在任何地方返回任何内容。
其他人都说了什么。
我看到另外两个问题:
首先,XmlDocument.Load( string )
采用文件名而不是 XML 数据。为此,您需要使用 LoadXml()
方法。
其次,看起来您正在尝试按名称计算节点。为什么要编写代码来遍历 XML 树?让框架为您服务。代码不是你写的 代码你不必测试或调试。
该方法SelectNodes( string xpathExpression )
为您提供文档中与指定 XPath 表达式匹配的所有节点的平面列表。例如:
-
//*
文档中的每个节点(包括文档根目录(都与其在文档中的深度有关。 -
//foo/bar[@type='data']
每个具有type
属性的bar
元素,其值为data
,并且其直接祖先是文档中任何深度的foo
元素。 -
/EDI
(您的 XPath 表达式(文档的根节点,只要它被命名为"EDI"。 -
/EDI/*/foo
作为文档根元素EDI
的第二级子元素的所有foo
元素
。 -
/*
一个元素的列表,即文档的根元素,无论其名称如何。您可能希望在此处使用SelectSingleNode()
方法,因为您知道不会返回多个元素。
编写一个 XPath 表达式,为您提供所需的特定节点集,并使用 Linq for 对象来构建字典,从而:
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
。