首页新闻找找看学习计划

【急】想用自定义的语法通过表达式树编译成真正的C#代码

3
悬赏园豆:100 [待解决问题]

例如

string str = "f(q1-1).next(q3)";

其实 f 和 next 都是一个函数来的`想通过表达式树编译成真正的C#函数执行可行吗?

具体是怎么做的?各位高手请指点一下```

minlong的主页 minlong | 初学一级 | 园豆:100
提问于:2011-11-27 03:19
< >
分享
所有回答(3)
0

你提供的是一个完整表达式的string,要解析成表达式树代价比较大,还不如直接用CSharpCodeProvider来动态编译string。例子看这里

水牛刀刀 | 园豆:6350 (大侠五级) | 2011-11-28 10:03
0

如果只是想执行该方法的话,建议使用反射

风之语者 | 园豆:205 (菜鸟二级) | 2011-11-28 16:11
0

我晕,写到 最后 变成 一个 lisp 解释器 了。。

首先定义类型 

public class host
{
public string name = "what ";

public string f(string name)
{
return name + "fuck ";
}

public string next(string s)
{
return string.Format("{0} the ", s);
}
}



 FunctionFactory.AddPredefinedType(typeof(host));

//可行
var funct = FunctionFactory.Create<host, string>("(f(next(name)))");

var r = funct(new host());

//失败
var func = FunctionFactory.Create<int, int, string>("f(q1-1).next(q3)", new[] { "q1", "q3" });

var result = func(10, 1);

 

(f(next(name))) => 是可行的。

兄弟 还是用 CSharpCodeProvider 来做吧, 表达式树 顶不住啊。。
建议你去 看下 微软的 DynamicQueryhttp://code.msdn.microsoft.com/DynamicQuery-f65f6a4d

waninlezu | 园豆:661 (小虾三级) | 2011-11-29 11:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册