Je veux le InnerText de la div appelé album_notes. Comme dans beaucoup d'autres endroits, mon code est le suivant:
public void Album_Notes(HtmlAgilityPack.HtmlDocument bandHTML)
{
this.lblNotes.Text = bandHTML.DocumentNode.Descendants("div").First(x => x.Id == "album_notes").InnerHtml;
Le TextBlock, lblNotes, finit avec aucun texte. Si j'ouvre le QuickWatch en mode débogage, j'obtiens le résultat suivant:
L'expression ne peut pas contenir d'expressions lambda
même si j'ai utilisé la même syntaxe exacte au moins 10 autres fois ailleurs dans la même application. Ce qui est étrange, c’est qu’il ne génère pas d’erreur ou quoi que ce soit, il remplit simplement le TextBlock avec une chaîne vide.
Qu'est ce qui ne va pas avec mon code?
L' Expression cannot contain lambda expressions
message ne provient pas de HTMLAgilityPack mais de la fonctionnalité QuickWatch. Fondamentalement, une expression lambda est juste un sucre syntaxique: lors de la compilation, le lambda est converti en une fonction «réelle». Comme il se passe quelque chose pendant la compilation, vous ne pouvez pas créer un nouveau lambda au moment de l'exécution (c'est-à-dire dans la fenêtre QuickWatch).
Maintenant la question est: pourquoi lblNotes.Text
est- lblNotes.Text
vide? Malheureusement, je ne peux pas savoir sans voir le code HTML. Cependant, s'il n'y a pas d'erreur, cela signifie que la div "album_notes" a été trouvée (sinon, vous auriez une exception de référence nulle). Par conséquent, la propriété InnerHtml
est probablement vide.
Vous pouvez vérifier cela en réécrivant un peu votre code:
public void Album_Notes(HtmlAgilityPack.HtmlDocument bandHTML)
{
var div = bandHTML.DocumentNode.Descendants("div").First(x => x.Id == "album_notes");
this.lblNotes.Text = div.InnerHtml;
}
Ainsi, si vous placez un point d'arrêt sur la dernière ligne, vous pouvez vérifier la valeur de div
et div.InnerHtml
dans la fenêtre d'aperçu rapide.