方法不返回预期值

时间:2017-05-21 16:25:41

标签: c# methods return

我不知道下面的代码有什么问题。我的回报不起作用。 我在代码中评论了更多细节。

item是文本文件中的一行。一个例子是" Port; 2302;"

    portTextBox.Text = Config_check(item, "Port", 1);
    private string Config_check(string item, string contains, int i)
    {
        string part = "defualt";
        if (item.Contains(contains))
        {
            MatchCollection Parts = Regex.Matches(item, @"(?i); *(.+?);(?-i)", RegexOptions.Singleline);
            foreach (Match m in Parts)
            {
                part = m.Groups[i].Value; // sets part to '2302'
                MessageBox.Show(part); // Shows '2302', Does open message box
                return part; // Dosnt work
            }
            MessageBox.Show(part); // Shows 'Defualt' why?!?!
            return part; // Dosnt work
        }
        MessageBox.Show(part); // Shows 'Defualt' why?!?!
        return part; // returns 'Defualt'
    }

1 个答案:

答案 0 :(得分:0)

可能你的问题是循环内的return语句。如果从方法返回,则您的方法的其余部分将不再执行。所以你可能要做的就是删除内部回报:

portTextBox.Text = Config_check(item, "Port", 1);
private string Config_check(string item, string contains, int i)
{
    string part = "defualt";
    if (item.Contains(contains))
    {
        MatchCollection Parts = Regex.Matches(item, @"(?i); *(.+?);(?-i)", RegexOptions.Singleline);
        foreach (Match m in Parts)
        {
            part = m.Groups[i].Value;
            MessageBox.Show(part);
        }
        MessageBox.Show(part);
    }
    MessageBox.Show(part);
    return part;
}

但是,由于我不了解您的其余代码,因此可能仍无效。

这实际上似乎并不是一个非常好的尝试,因为你在foreach循环中覆盖了part,因此唯一的值将在part中,将是Parts的最后一场比赛中保存的那个。

修改

如果你不想要foreach循环,你可以简单地选择最后一项:

portTextBox.Text = Config_check(item, "Port", 1);
private string Config_check(string item, string contains, int i)
{
    string part = "defualt";
    if (item.Contains(contains))
    {
        MatchCollection Parts = Regex.Matches(item, @"(?i); *(.+?);(?-i)", RegexOptions.Singleline);
        part = Parts.OfType<Match>().LastOrDefault() ?? "default";
        MessageBox.Show(part);
    }
    MessageBox.Show(part);
    return part;
}

你可以(显然)删除foreach循环中的消息框。