我不知道下面的代码有什么问题。我的回报不起作用。 我在代码中评论了更多细节。
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'
}
答案 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循环中的消息框。