代码是:
Public Class Form1
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim item As HtmlElementCollection
item = WebBrowser1.Document.GetElementsByTagName("span")
Dim ht As HtmlElement
For Each ht In item
MsgBox(ht.DomElement.attributes("class").value.ToString)
Next
End Sub
End Class
在C#中,它找不到.attributes("class").value.ToString()
部分。
答案 0 :(得分:2)
您的代码在VB.Net中而不是在C#中工作的原因是您使用Option Strict Off
(可能隐含地省略Option Strict On
)。这告诉编译器假设Attributes
中有一个DOMElement
成员,这是一个Object
。
在C#中,一般情况下不等同于Option Strict On
,但如果使用dynamic
类型,则可以执行相同的操作。
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var item = webBrowser1.Document.GetElementsByTagName("span");
foreach(HtmlElement ht in item)
{
dynamic element = ht.DomElement;
MessageBox.Show(element.Attributes["class"].Value.ToString());
}
}
这允许您在设计时访问您不知道的类型的属性,只要它们在运行时存在,类似于带有Object
的VB.Net中的Option Strict Off
。但要小心,因为这允许你有点鲁莽地编写代码(类似于VB :)所以你应该在这种情况下添加一些检查和异常处理。
答案 1 :(得分:0)
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Form1
{
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElementCollection item = default(HtmlElementCollection);
item = WebBrowser1.Document.GetElementsByTagName("span");
HtmlElement ht = default(HtmlElement);
foreach ( ht in item) {
Interaction.MsgBox(ht.DomElement.attributes("class").value.ToString);
}
}
}
答案 2 :(得分:0)
我认为正确的值将在这里:
ht.GetAttribute("class")
完整代码:
HtmlElementCollection items;
items = WebBrowser1.Document.GetElementsByTagName("span");
HtmlElement ht;
foreach (ht in items) {
MessageBox.Show(ht.GetAttribute("class"));
}
答案 3 :(得分:0)
你的'foreach'循环需要包含在C#中的变量类型:
foreach (HtmlElement ht in item)
{
MessageBox.Show(ht.DomElement.Attributes["class"].Value.ToString());
}
此外,由于HtmlElement类的'DomElement'属性返回'Object',因此在调用'Attributes'属性之前,您必须将“ht.DomElement”强制转换为适当的类型。我只是猜测它是一个索引器,但是因为'DomElement'返回Object,它就是 - 猜测。
如,
foreach (HtmlElement ht in item)
{
MessageBox.Show((SomeType)(ht.DomElement).Attributes["class"].Value.ToString());
}