【问题标题】:How can I access a element of a IReadOnlyCollection through it index?如何通过索引访问 IReadOnlyCollection 的元素?
【发布时间】:2015-12-14 19:38:41
【问题描述】:

我正在使用 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();                
        }    
}

谢谢

【问题讨论】:

  • new IControl。接口上没有构造函数

标签: c# selenium listiterator readonly-collection


【解决方案1】:

对索引值使用 ElementAt(int) 函数。

这里是 ElementAt(int) 函数 https://msdn.microsoft.com/en-us/library/bb299233(v=vs.110).aspx 的 MSDN 链接

【讨论】:

    【解决方案2】:

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

    IReadOnlyCollection<IWebElement> rows = Driver.FindElements(By.XPath("./*/tr"));   
    
    int index = 1; // sample
    
    var row = rows.ElementAt(index)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2022-01-24
      • 2020-01-15
      • 2015-09-23
      • 2020-06-30
      • 2012-03-09
      相关资源
      最近更新 更多