Невозможно изменить foreach на синтаксис LINQ - PullRequest
0 голосов
/ 29 октября 2018

Я безуспешно пытаюсь изменить следующий цикл на выражение 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 голосов
/ 29 октября 2018

Используйте это:

var divNota = 
    tablaNotas.Select((element, index) => 
        element.FindElement(By.Id($"accion-1-celda-0-{index}-0")))
    .ToList();
0 голосов
/ 29 октября 2018

В Linq некоторые зарезервированные слова, такие как Where, FirstOrDefault, создают условие для вашего запроса, а зарезервированное слово 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 и index .

В data все данные находятся в цикле, а index - в цикле.

0 голосов
/ 29 октября 2018
            var result = tableNotas
            .Select((element, index) => element.FindElement(By.Id("accion-1-celda-0-" + index + "-0")))
            .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...