我目前正在使用带有文本文件的foreach循环遍历列表,但是当它到达列表的末尾时它会自行返回,所以从第1行到第10行然后它从10变为1而不是结束?
代码示例 -
public static int lineint = 1;
Foreach功能:
foreach (String line in File.ReadLines(@"input.txt").Skip(lineint))
{
string[] data = line.Split(':');
string query = data[0];
string uri = data[1];
if (driver.FindElements(By.Name("search")).Count != 0)
{
// exists
driver.FindElement(By.Name("search")).SendKeys(search);
driver.FindElement(By.Name("uri")).SendKeys(uri + Keys.Enter);
CheckResponse(line); //triggers function
}
else
{
driver.Manage().Cookies.DeleteAllCookies();
driver.Navigate().Refresh();
}
}
CheckResponse(线);功能 -
private static void CheckResponse(string line)
{
if (driver.FindElements(By.XPath("//*[@id='modal']/div/div/div/p[contains(text(), 'Search not found')]")).Count != 0)
{
Console.WriteLine(line + " - Failed Search");
lineint = lineint + 1;
foreachsearchfunc(); //function for the foreach loop
}
else
{
Console.Writeline("Success");
}
}
所以会发生的情况是每个函数在文件的第一行发送请求然后触发checkresponse函数,如果检查响应返回“Search not found”,它会在.skip上用+ 1重新触发foreach,跳过第一行到第二行,第四行。
但是当它到达列表的末尾时会发生什么,只要它自己运行,例如 -
输入=
Search1:Uri1
Search2:uri2
Search3:Uri3
进程=
Search1:Uri1
Search2:uri2
Search3:Uri3
Search3:Uri3
Search2:uri2
Search1:Uri1
Search1:Uri1
Search2:uri2
...
并继续循环列表和第四个..
答案 0 :(得分:0)
为了简单起见,我将命名您的功能"每个"和"检查"。
似乎发生了这种情况:
如果不确切知道它应该如何运作,您可以通过在break;
CheckResponse(line);
来阻止这种情况发生
如果退出循环取决于"检查"成功与否,你应该改变它以返回布尔值:
private static boolean CheckResponse(string line)
然后在"成功"中添加return true;
" if"的一部分和{34}中的return false;
失败" if的一部分。然后你可以有条不紊地打破"每个"方法:
if (CheckResponse(line))) // or `if (!CheckResponse(line))`, depending on what you need
{
break;
}
事实上,您是否可以简化您对此所做的事情?:
foreach (String line in File.ReadLines(@"input.txt").Skip(lineint))
{
string[] data = line.Split(':');
string query = data[0];
string uri = data[1];
if (driver.FindElements(By.Name("search")).Count != 0)
{
// exists
driver.FindElement(By.Name("search")).SendKeys(search);
driver.FindElement(By.Name("uri")).SendKeys(uri + Keys.Enter);
if (driver.FindElements(By.XPath("//*[@id='modal']/div/div/div/p[contains(text(), 'Search not found')]")).Count == 0)
{
Console.WriteLine("Success");
break; // exit the loop
}
}
else
{
driver.Manage().Cookies.DeleteAllCookies();
driver.Navigate().Refresh();
}
}