无法将foreach更改为LINQ语法

时间:2018-10-28 21:37:04

标签: c# .net list linq selenium

我尝试将以下循环更改为LINQ表达式失败:

int index = 0;
IList<IWebElement> divNota = new List<IWebElement>();

foreach (IWebElement element in tablaNotas)
{
    divNota.Add(element.FindElement(By.Id("accion-1-celda-0-" + index + "-0")));
    index++;
}

我尝试使用

IList <IWebElement> divNota = tablaNotas.Select(element => element.FindElement(By.Id("accion-1-celda-0-"+ tablaNotas.IndexOf(element) + "-0"))).ToList();

但是tablaNotas.IndexOf(element)总是返回-1,这意味着在element中找不到tablaNotas

字符串"accion-1-celda-0-"+ tablaNotas.IndexOf(element) + "-0"用于更改为

"accion-1-celda-0-"+ 1 + "-0"
"accion-1-celda-0-"+ 2 + "-0"
"accion-1-celda-0-"+ 3 + "-0"
...
"accion-1-celda-0-"+ n + "-0"

根据元素的索引

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

            var result = tableNotas
            .Select((element, index) => element.FindElement(By.Id("accion-1-celda-0-" + index + "-0")))
            .ToList();

答案 1 :(得分:3)

使用此:

var divNota = 
    tablaNotas.Select((element, index) => 
        element.FindElement(By.Id($"accion-1-celda-0-{index}-0")))
    .ToList();

答案 2 :(得分:3)

Linq中,一些保留字,例如WhereFirstOrDefault为查询创建条件,而Select保留字可以创建您想要的对象{{1 }}方法将方法应用于元素。这是修改集合(例如数组)中的元素的一种优雅方法。此方法将匿名函数(通常指定为lambda表达式)作为参数接收。

示例:让我们看一个将Select扩展方法应用于字符串数组的程序。分配数组类型的局部变量,并使用三个字符串文字。我们在此数组引用上使用Select。

基本方法在这里:

Select

现在!对于您搜索的该问题,可以使用以下代码:

public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,TResult> selector);

var divNotaResult = list .Select((data, index) => data.FindElement(By.Id("accion-1-celda-0-" + index + "-0"))) .ToList(); 方法中,与Select类似,我们必须在foreach 数据索引中拖曳对象。

function具有循环的每个数据,而data具有循环的计数。