Лямбда-выражение. Возврат объекта, соответствующего тексту - PullRequest
1 голос
/ 27 января 2020

Доброе утро всем,

Это может быть результатом понедельника блюза, но я не могу обернуться вокруг этого. Я пытаюсь вернуть один объект, соответствующий тексту, который мы передаем.

public Dictionary<IWebElement, ReadOnlyCollection<IWebElement>> Cells;
public IWebElement FindCellByText(string pText)
{
    return Cells.Select(m => m.Value).Select(m => m.FirstOrDefault<IWebElement>(e=> e.Text == pText));
}

Ошибка: 'System.Collections.Generi c .IEnumerable' в 'OpenQA.Selenium.IWebElement'. Существует явное преобразование (вы пропустили приведение?) Приведенный выше код пытается получить одну ячейку. Ячейки делятся на строки (являющиеся ключом) и значения (являющиеся ячейками).

L oop через каждую строку и проверьте каждую ячейку, чтобы найти, соответствует ли она тексту, и верните ее.

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 27 января 2020

Я бы сделал что-то похожее на это:

return Cells.Select(row => row.Value).SelectMany(q => q).FirstOrDefault(item => item.Text.Equals(pText));

Часть Cells.Select(row => row.Value) проецирует коллекцию ReadOnlyCollection объектов (IEnumerable<IReadOnlyCollection<IWebElement>>);

Затем вы используете .SelectMany(q => q), чтобы сгладить коллекцию, тем самым преобразовав ее в IEnumberable<IWebElement>.

Продолжая, вы применяете запрос .FirstOrDefault(item => item.Text.Equals(pText)) для извлечения первого элемента (или null, если не существует), которое удовлетворяет условию.

Я надеюсь, что это поможет вам.

0 голосов
/ 27 января 2020

Вы можете использовать SelectMany вместо Select:

public IWebElement FindCellByText(string pText)
{
    return Cells.SelectMany(m => m.Value).FirstOrDefault(e=> e.Text == pText);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...