【发布时间】:2013-05-17 17:31:49
【问题描述】:
我目前正在努力创建动态表达式,我有以下场景,我希望帮助实现。
给定:
public class planet {
public string name { get;set; }
}
class someTestClass {
[Test]
public void Planet_Exists_Statically(){
var planetName = "earth";
var planets = new List<planet> {new planet {name = planetName}};
var found = planets.Exists(MakePredicate(planetName));
Assert.IsTrue(found);
}
[Test]
public void Planet_Exists_Statically(){
var planetName = "earth";
var planets = new List<planet> {new planet {name = planetName}};
var found = planets.Exists(MakeDynamicPredicate(planetName));
Assert.IsTrue(found);
}
private Predicate<planet> MakePredicate(string planetName){
Expression<Predicate<planet>> pred = p => p.name == planetName;
return pred.Compile();
}
private Predicate<planet> MakeDynamicPredicate(string planetName){
var parm = Expression.Parameter(typeof(planet), "p")
var pred = Expression.Lambda<Predicate<planet>>(
Expression.ReferenceEqual(
Expression.Property(parm, typeof(planet), "name"),
**???WHAT GOES HERE???**,
parm);
return pred.Compile();
}
}
所以我的问题是我无法让 MakeDynamicPredicate 返回的谓词等于 MakePredicate 函数生成的谓词。
看了reply post from Jon Skeet,但不明白如何实现ConstantExpression,以便捕获局部变量...
任何帮助将不胜感激。
附加信息:以后我可能不知道正在使用的类,因此它最终会被抽象为更通用。
【问题讨论】:
-
如果你提到了一些帖子(Jon Skeet 的那个),如果你链接到它会很有帮助。
-
抱歉,我将 Jon 的名字作为他提供的答案的链接
标签: .net expression-trees local-variables constant-expression