C#使用foreach遍历HTML元素报错:无法操作object类型变量
解决foreach无法遍历GetElementsByTagName返回值的问题
这个问题我之前也碰到过!核心原因很明确:GetElementsByTagName实际返回的是HtmlElementCollection类型,但你把它存在了object变量里,编译器没法识别它的枚举器实现,自然就抛出了那个错误。
完全不用绕到HtmlElement = new div这类复杂方案,直接修正变量类型就能搞定:
// 直接声明为HtmlElementCollection类型,而非object HtmlElementCollection divs = this.webBrowser1.Document.Body.GetElementsByTagName("div"); foreach (HtmlElement d in divs) { if (d.GetAttribute("className") == "_3576") { this.label2.Text = d.InnerText; } }
如果因为某些场景必须保留object类型变量,也可以通过类型转换来解决:
object divs = this.webBrowser1.Document.Body.GetElementsByTagName("div"); // 强制转换为HtmlElementCollection后再遍历 foreach (HtmlElement d in (HtmlElementCollection)divs) { if (d.GetAttribute("className") == "_3576") { this.label2.Text = d.InnerText; } }
额外提个小优化:如果你只需要第一个匹配的div元素,找到后可以直接跳出循环,避免不必要的遍历:
HtmlElementCollection divs = this.webBrowser1.Document.Body.GetElementsByTagName("div"); foreach (HtmlElement d in divs) { if (d.GetAttribute("className") == "_3576") { this.label2.Text = d.InnerText; break; // 找到目标元素后停止遍历 } }
内容的提问来源于stack exchange,提问作者ArGOO
相关产品推荐
相关产品推荐

