0

这是我的代码:

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;
}

这行吗?有人可以测试一下吗?

4

4 回答 4

12

我认为这是因为您的 return 语句位于循环内的 if 内。如果循环永远不会执行,或者 if never 为真,会发生什么?

于 2009-11-08T16:55:43.360 回答
6

你了解你自己的代码吗?你想从这个方法返回什么?目前您的代码意味着以下内容:
读取 XML 文件,直到找不到“关键字”元素。在找到“关键字”元素后,将获取其“名称”属性的值并将其返回包装到一个元素数组中。
正如其他人提到的那样,可能存在 XML 文档没有元素的情况。在这种情况下,您将退出循环而不返回任何值。您应该决定在这种情况下该怎么做。您可以返回一些特殊值,例如“null”或空数组。或者,如果您确定在指定的 XML 文档中至少应该存在一个“关键字”元素,那么您可以从方法的末尾抛出一些异常以指示违反了某些先决条件。
我认为您已尝试编写具有不同行为的方法。我相信您的意思是:
读取 XML 文件并从所有“关键字”元素中收集“名称”属性的值,并将收集的值作为字符串数组返回。
这将更有意义,在这种情况下,即使 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;
    }
}

请注意,我还将创建的 XmlReader 的使用包装在“使用”块中,以确保在我们离开该方法之前将其处理掉。

于 2009-11-08T17:33:14.160 回答
3

在方法结束时和 if 时,您应该有一个默认返回值。

正如编译器所说,您应该对所有代码路径都有一个返回语句。如果 while 永远不会执行,则不会返回,if 语句也是如此。

于 2009-11-08T16:56:21.550 回答
3

您必须在循环之外放置一个 return 语句。否则,如果名称永远不是“关键字”,您的代码将永远不会返回!

于 2009-11-08T16:57:25.073 回答