Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
并非所有代码路径都返回值C#?_C#_Xmlreader - Fatal编程技术网

并非所有代码路径都返回值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。
有人能测试一下吗?
,你没有访问编译器的权限还是什么?这将消除该错误,看起来很好。我想这没关系。