如何生成对方法参数的“表达式”引用

时间:2019-03-22 22:39:14

标签: c# reflection expression-trees

如果我有一个使用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();
}

1 个答案:

答案 0 :(得分:3)

由于表达式可以编译为Func<bool>,因此就其而言,ssub的值是常量:

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
相关问题