Je construis un arbre d'expression LINQ mais il ne compilera pas parce que prétendument la variable locale $var1
est hors de portée:Construire un arbre d'expression LINQ: comment obtenir la variable portée
variable « » de type 'System.Object' référencé du champ d'application '', mais il ne se définit pas
Ceci est l'arbre d'expression:
.Block() {
$var1;
.If ($n.Property1 == null) {
.Block() {
$var1 = null;
.Return #Label1 { }
}
} .Else {
.Default(System.Void)
};
$var1 = (System.Object)($n.Property1).Length;
.Label
.LabelTarget #Label1:;
$var1
}
Le code suivant est responsable de la construction de l'arbre. Cela fait partie de quelque chose de plus grand, donc je ne m'attends pas à ce que son but soit parfaitement clair à partir de cet exemple. Donc, la question est: comment puis-je obtenir la variable locale dans la portée de sorte que l'expression compile avec succès?
Merci Jon, qui a fonctionné! La résolution de cette question a révélé un deuxième problème assez similaire. L'affectation de la variable sourceExpression lance le compilateur d'expression throw: "variable 'n' de type 'TestClass' référencé par scope '', mais il n'est pas défini" –
J'ai pu résoudre ce problème, merci encore. –
Merci encore de m'avoir aidé. La question était étroitement liée à un article de blog que j'écrivais à http://blog.subspace.nl/post/Getting-rid-of-null-checks-in-property-chains.aspx, qui pourrait vous intéresser. –