要素のノードをループする次のコードがあります。
public static IEnumerable<IHTMLDOMNode> AllElements(this IHTMLDOMNode node)
{
if (node.IsHTMLElement())
{
IHTMLElement element = (IHTMLElement)node;
IHTMLElementCollection collection = element.all;
int length = collection.length;
for (var i = 0; i < length; i++)
{
IHTMLDOMNode item = collection.item(i);
yield return item;
}
}
}
私の問題は、ループ中にコレクションの長さが変わることがあるということです。yield return item;
nullの場合は常にブレークするブレークポイントを設定しitem
、それが停止したとき(したがって、item
だったときnull
)、length
変数が815、814、 collection.length
およびi
814であったため、範囲外のアイテムを取得しようとしていたことに気付きました。
おそらくループの中に入れることができると思いcollection.length
ますが、これでは問題の根本を解決できない可能性があります。これは可能でしょうか?ページ内のスクリプトがループの実行と同時に実行される可能性はありますか?それは内部の要素を削除するスクリプトになりますか?または、他に何が原因でコレクションの長さが変更されている可能性がありますか?