HTMLAgilityPack表达式不能包含lambda表达式

时间:2012-05-06 09:12:02

标签: c# windows-phone-7 lambda html-agility-pack

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

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。

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

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

现在的问题是:为什么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;
}

这样,如果在最后一行放置断点,则可以在快速监视窗口中检查divdiv.InnerHtml的值。

相关问题