Étant donné ce code:Linq Func/Expression d'évaluation locale
int min = 0;
Expression<Func<List<IUser>, bool>> ulContainsJohn =
(l => l.Where(u => u.FirstName == "John").Count() > min);
Assert.AreEqual(true, ulContainsJohn.Compile()(userList));
min = 3;
Assert.AreEqual(true, ulContainsJohn.Compile()(userList));
La liste contient 1 "John", mais le second assert échoue. Comment lier la valeur de min au Func avec impatience, de sorte qu'il n'essaie pas de réévaluer la variable min? Clarification: Je ne veux pas changer la signature. Je veux que l'arbre d'expression n'évalue pas min comme une variable, mais comme une expression constante. Existe-t-il de toute façon de convertir l'évaluation de min pour que l'arbre ait une expression constante au lieu d'une évaluation variable?
Pourquoi? Essayez-vous d'analyser l'arbre d'expression? – SLaks
Vous avez un paradoxe ... Vous voulez une expression constante ... mais votre test la change? – Nix
Je veux la valeur de min liée comme une expression constante dans la fonction ulContainsJohn. min peut changer, la valeur liée dans la fonction ne devrait pas. Cela a-t-il un sens maintenant? – Shlomo