web-dev-qa-db-ja.com

インデックスを介して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();                
        }    
}

ありがとう

17
Yoiku

ElementAt(int)関数をインデックス値とともに使用します。

ElementAt(int)関数へのMSDNリンクは次のとおりです https://msdn.Microsoft.com/en-us/library/bb299233(v = vs.110).aspx

29
Mikanikal

私は読み取り専用のコレクションを使用していませんが、 [〜#〜] msdn [〜#〜] のドキュメントから、ElementAt 方法。それはそのように機能するはずです:

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

int index = 1; // sample

var row = rows.ElementAt(index)
_

ElementAt()はLinqが提供する拡張メソッドであるため、クラスに_using System.Linq;_ステートメントを追加する必要がある場合があります。

11
jjczopek