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 を開くと、次の結果が得られます。

式にラムダ式を含めることはできません

同じアプリの他の場所で、まったく同じ構文を少なくとも 10 回は使用しましたが。奇妙なことに、実際にはエラーなどをスローせず、TextBlock を空の文字列で埋めるだけです。

コードの何が問題になっていますか?

4

1 に答える 1

1

メッセージは、Expression cannot contain lambda expressionsHTMLAgilityPack からではなく、QuickWatch 機能からのものです。基本的に、ラムダ式はシンタックス シュガーにすぎません。コンパイル時に、ラムダは「実際の」関数に変換されます。これはコンパイル中に発生するものであるため、実行時に (つまり、QuickWatch ウィンドウで) 新しいラムダを作成することはできません。

問題は、なぜ がlblNotes.Text空なのかということです。残念ながら、HTML コードを見ないとわかりません。ただし、エラーがない場合は、「album_notes」div が見つかったことを意味します (そうでない場合は、null 参照例外が発生します)。したがって、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

于 2012-05-06T10:19:45.517 に答える