如果我有一个使用Expression
树构建代码的方法来处理运行时类型,我该如何制作一个Expression
来引用该方法的参数?
例如在下面的代码中,如何构建Expression
来传递对该方法参数的引用?
public static bool ExpressionContains(string s, string sub) {
var cmi = typeof(String).GetMethod("Contains", new[] { typeof(string) });
var body = Expression.Call(cmi, s ???, sub ???);
return Expression.Lambda<Func<bool>>(body).Compile().Invoke();
}
答案 0 :(得分:3)
由于表达式可以编译为Func<bool>
,因此就其而言,s
和sub
的值是常量:
public static bool ExpressionContains(string s, string sub) {
var cmi = typeof(String).GetMethod("Contains", new[] { typeof(string) });
var body = Expression.Call(
Expression.Constant(s),
cmi,
Expression.Constant(sub));
return Expression.Lambda<Func<bool>>(body).Compile().Invoke();
}
如果您想编译传入Func<string, string, bool>
和s
的{{1}},则:
sub