【问题标题】:Not all code paths return a value when parsing csv files [closed]解析 csv 文件时,并非所有代码路径都返回值 [关闭]
【发布时间】:2014-10-03 16:40:52
【问题描述】:

每当我尝试运行我的脚本时,我都会收到以下错误消息 - Error 1 'AddressLookup.Form1.GetAddress(string)': not all code paths return a value

这发生在以下代码块中:

    private void SearchButton_Click(object sender, EventArgs e)
    {
        String addressText = GetAddress(AddressEntry.Text);
        MessageBox.Show(addressText);
    }

    String GetAddress(String addressText)
    {
        var strLines = File.ReadLines("pca_mk_addresslist.csv");
        foreach (var line in File.ReadLines("pca_mk_addresslist.csv"))
        {
            var fields = line.Split(',');

            foreach (var field in fields)
            {
                if (field == addressText)
                    return field;
            }
            return String.Empty;
        }
    }

但是,使用以下代码块,一切正常,但每当我尝试查找结果时,它都会返回一个空白消息框:

    private void SearchButton_Click(object sender, EventArgs e)
    {
        String addressText = GetAddress(AddressEntry.Text);
        MessageBox.Show(addressText);
    }

    String GetAddress(String addressText)
    {
        var strLines = File.ReadLines("pca_mk_addresslist.csv");
        foreach (var line in File.ReadLines("pca_mk_addresslist.csv"))
        {
            var fields = line.Split(',');

            foreach (var field in fields)
            {
                if (field == addressText)
                    return field;
            }

        }
        return String.Empty;
    }

【问题讨论】:

  • 想象一下如果没有进入循环会发生什么。
  • 顺便说一句,如果字段匹配,为什么要返回 fields[1] 而不是 field ?这没有意义
  • "it returns a blank message box" - 嗯,该方法中的代码路径之一返回String.Empty。在显示String.Empty 时,您是否期望出现除空白消息框之外的其他内容?在调试器中单步执行代码并检查运行时值。
  • 另外,您在同一个文件上多次调用File.ReadLines 并且从不使用第一个文件是否有原因?这似乎超级浪费。

标签: c# csv


【解决方案1】:

如果您的文件 pca_mk_addresslist.csv 为空,则您的 foreach 循环将永远不会进入(空集合中的 foreach 对象产生零次迭代)。因此,由于您仅在循环中返回,因此空文件的情况永远不会返回任何内容。这是不允许的。

if pca_mk_addresslist.csv has any lines
    return something
else
    ?

你需要告诉它你的 default 值应该是什么。很可能是null,但你必须告诉它。假设你想让你的程序做什么不是编译器的工作。只是为了让你更容易写。

至于你的第二个问题,看起来你的文件,实际上是空的。该字段匹配或不匹配。您可能想要添加一些更好的默认文本,或者逐步通过程序来发现它是什么。

编辑:

根据评论,您想要的更像是

private String GetAddress(String addressText)
{
    var strLength = File.ReadAllLines("pca_mk_addresslist.csv");

    var strLines = File.ReadLines("pca_mk_addresslist.csv");
    foreach (var line in strLines)
    {
        var fields = line.Split(',');

        foreach (var field in fields)
        {
            if (field == addressText)
                return field;
        }
    }

    return null;
}

【讨论】:

  • Haguen - 谢谢,我尝试了以下操作,但不断收到错误消息 pastebin.com/SLubtHhf
  • 它没那么聪明。只需在后面加上你的else 的内容,没有条件。我在打电话,所以我不能给你看,但是是的。
  • @methuselah 我添加了它应该如何。但请确保您在使用之前了解代码,因为返回 null 确实意味着在这里,正如我所说,看起来您的文件实际上可能是空的,所以准备好接受并利用 @987654329 的信息@给你。
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 2013-10-06
  • 2016-02-14
  • 2014-04-02
相关资源
最近更新 更多