HTMLAgilityPack 表达式不能包含 lambda 表达式
本文关键字:表达式 lambda 包含 不能 HTMLAgilityPack | 更新日期: 2023-09-27 18:33:29
我想要名为 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,最终没有文本作为结果。如果我在调试模式下打开快速监视,则得到以下结果:
表达式不能包含 lambda 表达式
即使我在同一应用程序的其他地方至少使用了 10 次完全相同的语法。奇怪的是,它实际上并没有抛出错误或任何东西,它只是用一个空字符串填充 TextBlock。
我的代码有什么问题?
Expression cannot contain lambda expressions
消息不是来自 HTMLAgilityPack,而是来自 QuickWatch 功能。基本上,lambda 表达式只是一个语法糖:编译后,lambda 被转换为"真实"函数。由于这是编译期间发生的事情,因此您无法在运行时(即在"快速监视"窗口中)创建全新的 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;
}
这样,如果在最后一行放置断点,则可以在快速监视窗口中检查div
和div.InnerHtml
的值。