Выражение HTMLAgilityPack не может содержать лямбда-выражения

c# html-agility-pack lambda windows-phone-7

Вопрос

Я хочу InnerText из div с именем 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 в режиме отладки, я получаю следующий результат:

Выражение не может содержать лямбда-выражения

хотя я использовал тот же самый синтаксис не менее 10 раз в другом месте в том же приложении. Странно, что на самом деле это не вызывает ошибку или что-то еще, она просто заполняет TextBlock пустой строкой.

Что случилось с моим кодом?

Принятый ответ

Expression cannot contain lambda expressions сообщения Expression cannot contain lambda expressions не из HTMLAgilityPack, а из функции QuickWatch. В принципе, выражение лямбда - это просто синтаксический сахар: при компиляции лямбда преобразуется в «реальную» функцию. Поскольку это происходит во время компиляции, вы не можете создать новую лямбду во время выполнения (то есть в окне QuickWatch).

Теперь вопрос: почему lblNotes.Text пуст? К сожалению, я не могу знать, не видя кода HTML. Хотя, если нет ошибки, это означает, что div «album_notes» найден (иначе у вас будет исключение с нулевой ссылкой). Следовательно, свойство 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.InnerHtml останова на последней строке, вы можете проверить значение div и div.InnerHtml в окне быстрого просмотра.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow