无法将 foreach 更改为 LINQ 语法

elg*_*ato 4 .net c# linq selenium list

我试图将以下循环更改为 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++;
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用

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

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"
Run Code Online (Sandbox Code Playgroud)

根据元素的索引

任何帮助表示赞赏

小智 5

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

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

基本方法在这里:

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

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

var divNotaResult = list
            .Select((data, index) => data.FindElement(By.Id("accion-1-celda-0-" + index + "-0")))
            .ToList();
Run Code Online (Sandbox Code Playgroud)

Select方法中,foreach我们在function dataindex 中有两个对象。

data在环路中的每个数据,并且index具有循环计数。