gpt4 book ai didi

c# - 如何生成对方法参数的 `Expression` 引用

转载 作者:行者123 更新时间:2023-11-30 21:29:32 25 4
gpt4 key购买 nike

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

最佳答案

因为表达式编译为 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>其中 ssub被传入,然后:

public static bool ExpressionContains(string s, string sub) {
var sExpr = Expression.Parameter(typeof(string), "s");
var subExpr = Expression.Parameter(typeof(string), "sub");
var cmi = typeof(String).GetMethod("Contains", new[] { typeof(string) });
var body = Expression.Call(sExpr, cmi, subExpr);

return Expression.Lambda<Func<string, string, bool>>(body, new[] { sExpr, subExpr }).Compile().Invoke(s, sub);
}

关于c# - 如何生成对方法参数的 `Expression` 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com