【发布时间】:2015-02-13 17:19:37
【问题描述】:
我正在编写一个小表达式解析器,并希望包含方法调用。 语法类似于:functionName('stringValue',intValue)
然后,表达式解析器应该使用正确的签名(在本例中为字符串,int)查找名为“functionName”的静态函数
解析表达式没问题,但是我在调用right方法时遇到了麻烦。
到目前为止,我想出的是一个简单的 Expression.Call:
Expression.Call(typeof(MyContext).GetMethod(functionName), parameterExpressions)
这很好用,以后可以编译成一个可调用的函数。 但是当许多不同的重载、默认参数、params 关键字等开始发挥作用时,它就会变得棘手。我不会重新实现重载解析的整个 C# 逻辑,并认为 DLR 可以帮助我。
使用我可以写的动态关键字:
dynamic myC = MyContext;
return myC.functionName(param1, param2);
DLR 会确定要调用哪个函数重载。
问题是,我如何以编程方式实现这一目标?
到目前为止,我没有运气
Expression.Dynamic(..)
【问题讨论】:
-
你知道参数的类型吗?
标签: c# dynamic expression-trees