Как я могу получить доступ к элементу IReadOnlyCollection через его индекс?

Я работаю с selenium, и я использую функцию FindElements, поэтому я получаю элемент, который реализует интерфейс IReadOnlyCollection. Я хочу перебрать список, но кажется, что IReadOnlyCollection не имеет никакого метода, такого как Get(int index) или реализация операции [].

Я хочу избежать преобразования результата в список или массив, так как я просто хочу получить доступ к элементам для их чтения.

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

Это то, что я хочу сделать:

public void fillMatrix(){
    IReadOnlyCollection<IWebElement> rows = Driver.FindElements(By.XPath("./*/tr"));            
        IReadOnlyCollection<IWebElement> elements;
        matrix = new IControl[rows.Count()][];
        for(int i = 0; i < matrix.Count(); ++i){
            matrix[i] = rows[i].FinElements("./td").toArray();                
        }    
}

спасибо

2 ответов


используйте функцию ElementAt(int) со значением индекса.

вот ссылка MSDN на функцию ElementAt(int)https://msdn.microsoft.com/en-us/library/bb299233 (v=против 110).aspx


Я не использовал коллекции только для чтения, но из MSDN документация, похоже, что можно получить элемент по заданному индексу, используя ElementAt метод. Это должно работать так:

IReadOnlyCollection<IWebElement> rows = Driver.FindElements(By.XPath("./*/tr"));   

int index = 1; // sample

var row = rows.ElementAt(index)

возможно, вам придется добавить using System.Linq; оператор в вашем классе, потому что ElementAt() является методом расширения, предоставляемым Linq.