我试图通过标签名称获取html文档的值但是当我使用foreach时我得到了一个错误,“foreach语句不能对类型对象的变量进行操作,因为对象不包含GetEnumerator的公共定义”
object divs = this.webBrowser1.Document.Body.GetElementsByTagName("div");
foreach (HtmlElement d in divs)
{
if ((d.GetAttribute("className") == "_3576"))
{
this.label2.Text = d.InnerText;
}
}
我试图像这样使用求助的答案:
HtmlElement = new divs HtmlElement();
仍然无法正常工作。我只是将代码从VB.net转换为C#代码在VB.net中运行良好但在C#上出错。
最初的VB.net代码是:
Dim divs = WebBrowser1.Document.Body.GetElementsByTagName("div")
For Each d As HtmlElement In divs
If d.GetAttribute("className") = "_3576" Then
Label5.Text = d.InnerText
End If
Next
答案 0 :(得分:4)
无法枚举// in your state in your constructor add matchId and matchIdChanged then
static getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.matchId !== prevState.matchId) {
return { matchIdChanged: true, matchId: nextProps.matchId }
}
return null;
}
componentDidUpdate() {
if (this.state.matchIdChanged) {
fetch(matchAPI + this.props.matchId)
.then((matchResponse) => matchResponse.json())
.then((matchfindresponse) => {
console.log(matchfindresponse);
this.setState({
matchData:matchfindresponse,
testTeam:matchfindresponse.team1.name,
matchIdChanged: false // add this
})
})
}
}
类型的变量,因为它不是一个集合。我的猜测是原始的VB.NET代码看起来像这样:
object
表示变量的类型是推断(编译器为您指定)。
等效的C#代码将其声明为Dim divs = Me.WebBrowser1.Document.Body.GetElementsByTagName("divs")
:
var
或者您也可以跳过推断并明确声明:
var divs = this.webBrowser1.Document.Body.GetElementsByTagName("divs");