0

我想要名为album_notes 的div 的InnerText。正如我在许多其他地方所做的那样,我的代码如下:

public void Album_Notes(HtmlAgilityPack.HtmlDocument bandHTML)
{
        this.lblNotes.Text = bandHTML.DocumentNode.Descendants("div").First(x => x.Id == "album_notes").InnerHtml;

TextBlock,lblNotes,最终没有文本作为结果。如果我在调试模式下打开 QuickWatch,我会得到以下结果:

表达式不能包含 lambda 表达式

即使我在同一个应用程序的其他地方至少使用了 10 次完全相同的语法。奇怪的是它实际上并没有抛出错误或任何东西,它只是用一个空字符串填充 TextBlock。

我的代码有什么问题?

4

1 回答 1

1

Expression cannot contain lambda expressions消息不是来自 HTMLAgilityPack,而是来自 QuickWatch 功能。基本上,lambda 表达式只是一种语法糖:在编译时,lambda 被转换为“真正的”函数。由于这是在编译期间发生的事情,因此您无法在运行时(即在 QuickWatch 窗口中)创建全新的 lambda。

现在的问题是:为什么是lblNotes.Text空的?不幸的是,没有看到 HTML 代码我就无法知道。但是,如果没有错误,则意味着已找到“album_notes”div(否则您将遇到空引用异常)。因此,该InnerHtml属性可能是空的。

您可以通过稍微重写代码来检查:

public void Album_Notes(HtmlAgilityPack.HtmlDocument bandHTML)
{
    var div = bandHTML.DocumentNode.Descendants("div").First(x => x.Id == "album_notes");
    this.lblNotes.Text = div.InnerHtml;
}

这样,如果你在最后一行下一个断点,你就可以在 quickwatch 窗口中检查divand的值。div.InnerHtml

于 2012-05-06T10:19:45.517 回答