C# 解析csv文件时,并非所有代码路径都返回值

C# 解析csv文件时,并非所有代码路径都返回值,c#,csv,C#,Csv,每当我尝试运行脚本时,都会收到以下错误消息-错误1“AddressLookup.Form1.GetAddressstring”:并非所有代码路径都返回值 以下代码块会出现这种情况: private void SearchButton_Click(object sender, EventArgs e) { String addressText = GetAddress(AddressEntry.Text); MessageBox.Show(addre

每当我尝试运行脚本时,都会收到以下错误消息-错误1“AddressLookup.Form1.GetAddressstring”:并非所有代码路径都返回值

以下代码块会出现这种情况:

    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;
        }
    }
但是,对于以下代码块,一切正常,但每当我尝试查找结果时,它都会返回一个空白messagebox:

    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;
    }
如果文件pca_mk_addresslist.csv为空,则永远不会在空集合中输入foreach循环,foreach对象的迭代次数为零。因此,由于只在循环中返回,因此空文件的情况下不会返回任何内容。这是不允许的

if pca_mk_addresslist.csv has any lines
    return something
else
    ?
您需要告诉它您的默认值应该是什么。它可能是空的,但你必须告诉它。编译器的工作不是假设您希望程序做什么。只是为了让你更容易写

至于你的第二个问题,看起来你的文件实际上是空的。要么就是没有匹配的字段。您可能希望添加一些更好的默认文本,或者逐步浏览程序以发现它是什么

编辑:

根据评论,你想要的更像

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

想象一下,如果循环从未被输入会发生什么。顺便说一句,如果字段匹配,为什么返回字段[1]而不是字段?返回一个空白消息框是没有意义的——好吧,该方法中的一个代码路径返回String.Empty。当显示String.Empty时,您是否希望看到除空白消息框之外的其他内容?在调试器中逐步检查代码并检查运行时值。另外,是否有原因导致您在同一文件上多次调用File.ReadLines,而从不使用第一个文件?这看起来太浪费了。哈格恩-谢谢,我尝试了以下步骤,但一直收到错误消息,这不是很明智。只需在后面添加else的内容,无条件。“我在打电话,所以我不能给你看,但是是的。”我在应该是什么样的情况下加上了玛土撒拉。但是请确保在使用之前理解代码,因为返回null在这里确实意味着什么,正如我所说的,您的文件可能实际上是空的,所以请准备好接受并利用null提供的信息。