转换一个for循环到Linq
下面的代码是按预期工作,但我想知道是否有一种方法来改善我的代码使用Linq?转换一个for循环到Linq
我正在做的是查找行[5]和行[6]是否有价值。
for (int i = 0; i < nameList.Count; i++)
{
IList<IWebElement> rows = driver.FindElements(By.CssSelector("itd_1"));
for (int k = 0; k < rows.Count; k++)
{
if (rows[5].Text != " " && rows[6].Text != " ")
{
if (!string.IsNullOrEmpty(rows[5].Text) ||
!string.IsNullOrWhiteSpace(rows[5].Text) &&
!string.IsNullOrEmpty(rows[6].Text) ||
!string.IsNullOrWhiteSpace(rows[6].Text))
{
//do something here...
}
}
}
}
试试上面的
rows.Where(x => x[5].Text != " " && x[6].Text != " ")
.Where(x=> !string.IsNullOrEmpty(x[5].Text) || !string.IsNullOrWhiteSpace(x[5].Text)
&& !string.IsNullOrEmpty(x[6].Text) || !string.IsNullOrWhiteSpace(x[6].Text));
冗余...... –
newStackExchangeInstance你是对的!这是一个快速解决方案:) –
除了IsNullOrWhitespace之外,所有这些检查都是无关紧要的。 –
var result = rows.Where(x => !string.IsNullOrWhitespace(x[5]) && !string.IsNullOrWhitespace(x[6]));
这是会得到你想要的结果的IEnumerable
。
这将完全符合您的要求,仅在删除了冗余部件的情况下。假设//do something here..
块不更改行值。
for (int i = 0; i < nameList.Count; i++)
{
IList<IWebElement> rows = driver.FindElements(By.CssSelector("itd_1"));
if (!string.IsNullOrWhiteSpace(rows[5]) && !string.IsNullOrWhiteSpace(rows[6]))
{
for (int k = 0; k < rows.Count; k++)
{
//do something here...
}
}
}
外层循环似乎没有对数据做任何事情?你只是做这个'nameList.Count'次?似乎缺少某些东西......你的意思是通过'i'来获得选择器吗? ''itd_“+我'也许?事实上,你的内循环('k')也没有做任何建设性的事情。我认为这个例子已经破裂。如果代码无意义,我们无法帮助您。 –
当您不使用'k'并直接通过索引访问'rows'时,'for'循环是什么? – Lee
你的代码很奇怪。你不会在任何地方使用'i'和'k' – ghord