并非所有代码路径都返回值C#?
这是我的代码:并非所有代码路径都返回值C#?,c#,xmlreader,C#,Xmlreader,这是我的代码: public String[] readXML(String filename) { XmlReader xmlReader = XmlReader.Create(@filename); List<String> names = new List<string>(); String[] keywords = null; while (xmlReader.Read()) { //Ke
public String[] readXML(String filename)
{
XmlReader xmlReader = XmlReader.Create(@filename);
List<String> names = new List<string>();
String[] keywords = null;
while (xmlReader.Read())
{
//Keep reading
if (xmlReader.Name.Equals("Keyword") && (xmlReader.NodeType == XmlNodeType.Element))
{
// get attribute from the Xml element here
string keywords = xmlReader.GetAttribute("name");
names.Add(keywords);
String[] keywordsArray = names.ToArray();
}
else
{
MessageBox.show("An Error Occured");
}
}
return keywordsArray;
}
public String[]readXML(字符串文件名)
{
XmlReader=XmlReader.Create(@filename);
列表名称=新列表();
字符串[]关键字=null;
while(xmlReader.Read())
{
//继续读
if(xmlReader.Name.Equals(“关键字”)&&(xmlReader.NodeType==XmlNodeType.Element))
{
//从这里的Xml元素获取属性
字符串关键字=xmlReader.GetAttribute(“名称”);
名称。添加(关键字);
String[]关键字数组=names.ToArray();
}
其他的
{
MessageBox.show(“发生错误”);
}
}
返回关键字数组;
}
这样行吗?有人能测试一下吗?我想这是因为您的return语句在if循环中。如果循环从未执行,或者if never为true,会发生什么情况?在方法结束时和结束时,您应该有一个默认的返回值
正如编译器所说,所有代码路径都应该有一个return语句。如果while从未执行,则不返回,If语句也是如此。必须将return语句置于循环之外。否则,如果名称从不为“关键字”,您的代码将永远不会返回 您了解自己的代码吗?您希望从此方法返回什么?当前,您的代码表示以下内容:
读取XML文件,直到找不到“关键字”元素。在“关键字”元素被找到后,获取其“name”属性的值,并将其包装成一个元素数组返回。
正如其他人提到的,XML文档可能没有元素。在这种情况下,您将退出循环而不返回任何值。你应该决定在那种情况下该怎么办。您可以返回一些特殊值,如“null”或空数组。或者,如果您确定指定的XML文档中至少应该存在一个“关键字”元素,那么您可以从方法末尾抛出一些异常,以指示违反了某些先决条件。
我想你们已经试着用不同的行为来写方法了。我相信你的意思是:
读取XML文件,从所有“关键字”元素中收集“name”属性的值,并将收集的值作为字符串数组返回。
这将更有意义,在这种情况下,即使XML文件不包含任何“关键字”元素,您也会得到一些结果。要实现这种行为,您应该将列表转换为数组,并将语句返回到方法的末尾。您将获得如下代码:
public static String[] readXML(String filename)
{
using(XmlReader xmlReader = XmlReader.Create(@filename))
{
List<String> names = new List<string>();
while(xmlReader.Read())
{
//Keep reading
if(xmlReader.Name.Equals("Keyword") && (xmlReader.NodeType == XmlNodeType.Element))
{
// get attribute from the Xml element here
string keywords = xmlReader.GetAttribute("name");
names.Add(keywords);
}
}
String[] keywordsArray = names.ToArray();
return keywordsArray;
}
}
publicstaticstring[]readXML(字符串文件名)
{
使用(XmlReader=XmlReader.Create(@filename))
{
列表名称=新列表();
while(xmlReader.Read())
{
//继续读
if(xmlReader.Name.Equals(“关键字”)&&(xmlReader.NodeType==XmlNodeType.Element))
{
//从这里的Xml元素获取属性
字符串关键字=xmlReader.GetAttribute(“名称”);
名称。添加(关键字);
}
}
String[]关键字数组=names.ToArray();
返回关键字数组;
}
}
请注意,我还将created XmlReader的用法包装在“using”块中,以确保在我们离开该方法之前将其释放。如果您不介意,请修复标记。我编辑了该方法以声明String[]keywordsArray=null;然后在while循环后返回关键字array。
有人能测试一下吗?
,你没有访问编译器的权限还是什么?这将消除该错误,看起来很好。我想这没关系。