如何通过索引访问IReadOnlyCollection的元素?

时间:2015-09-17 19:44:18

标签: c# selenium listiterator readonly-collection

我正在使用selenium,我正在使用FindElements函数,所以我得到一个实现IReadOnlyCollection接口的元素。我想遍历列表,但似乎IReadOnlyCollection没有任何方法,如Get(int index)或操作[]的实现。

我想避免将结果转换为List或数组,因为我只想访问元素来读取它们。

目前我不想使用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 个答案:

答案 0 :(得分:25)

将ElementAt(int)函数与索引值一起使用。

以下是ElementAt(int)函数https://msdn.microsoft.com/en-us/library/bb299233(v=vs.110).aspx

的MSDN链接

答案 1 :(得分:9)

我没有使用只读集合,但是从MSDN文档中,看起来可以使用ElementAt方法获取给定索引处的元素。它应该像那样工作:

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

int index = 1; // sample

var row = rows.ElementAt(index)

您可能需要在班级中添加using System.Linq;语句,因为ElementAt()是Linq提供的扩展方法。