我有这个循环遍历元素节点的代码:
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;
每当item
它为空时就会中断,并注意到当它停止时(因此item
是null
)我的length
变量是 collection.length
815、814 和i
814,因此它试图获取范围之外的项目。
我知道我可能会collection.length
进入循环,但恐怕这可能无法解决问题的根源。这应该是可能的吗?页面中的脚本是否可以在我的循环运行的同时运行,这将是删除内部元素的脚本?或者还有什么可能导致集合的长度发生变化?