2017-09-13 22 views
1

以下のスニペットを実行すると例外がスローされます。System.NotSupportedException: 'コレクションは読み取り専用です。'オブジェクトをiListから削除するときにスローされる

私はiListof webelementsを持っており、その要素に "WSC"という文字列が含まれている場合は、iListから削除したいと思います。

誰でもお手伝いできますか?以下のコード。

IList<IWebElement> tableRows; 
     tableRows = FindElement(By.XPath("//div[@ui-grid='vm.gridWoodSmokeViolations']")).FindElements(By.XPath("//div[@role='row']")); 
     Console.WriteLine("table row count before loop: " + tableRows.Count); 
     foreach (var row in tableRows) { 

      if (row.Text.ToString().Contains("WSC")) 
      { 

       tableRows.Remove(row); //exception thrown here 

      } 

     } 

あなたがIListのをimplments

+0

'foreach'を使用してコレクションをループする際にコレクションを変更しないでください。 [この回答では](https://stackoverflow.com/questions/7340757/c-sharp-list-removing-items-while-looping-iterating)のような 'for'ループを使ってみてください。または、削除する項目を見つけて、その項目への参照を保存し(LINQはここで助けます)、ループの後*を*削除します。 – Jonesopolis

+0

@Jonesopolis上記の目標を達成するにはどうしたらいいですか? i * dont * wantという文字列が含まれている場合、そのWeb要素を削除しますか? – kevin

+0

ok notmind私はそれを得たと思う。私は望んでいない要素を含む別のiListを作成してから、その2番目のiListを使ってオブジェクトを元のiList から削除しますか? – kevin

答えて

3

ないすべてのものは編集可能です提供することができるかもしれない任意の助けてくれてありがとう。最も簡単な解決策は、Linqを使ってフィルタを作成し、その上にToList()を実行することです。

IList<IWebElement> tableRows; 
    tableRows = FindElement(By.XPath("//div[@ui-grid='vm.gridWoodSmokeViolations']")).FindElements(By.XPath("//div[@role='row']")); 

    Console.WriteLine("table row count before loop: " + tableRows.Count); 

    tableRows = tableRows.Where(row=> !row.Text.ToString().Contains("WSC")).ToList(); 
+0

ああ、それはまさに私が必要なものです。ありがとうございます@Scott Chamberlain – kevin

+0

@kevinあなたの質問に正しく答えるならば、受け入れられたように答えてください。 –

+0

@ JohnM.Wright私はすでにそれをマークしていた考えを残念に – kevin

関連する問題