2012-05-06 58 views
0

我想要稱爲album_notes的div的InnerText。正如我在許多其他地方所做的一樣,我的代碼如下:HTMLAgilityPack表達式不能包含lambda表達式

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。

我的代碼有什麼問題?

回答

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值。

+0

雖然你沒有給我直接的答案,你的信息幫助我調試,特別是關於lambda轉換的觀點。問題是我從網站上弄錯了HTML標籤。我想要我的評論在這裏的文字:http://pastebin.ca/2144804 –